K8S云原生-高可用集群摆设V1.28.2

打印 上一主题 下一主题

主题 678|帖子 678|积分 2034

一、环境准备

K8S集群角色IP主机名安装相关组件
master10.1.16.160hqiotmaster07lapiserver、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico
master10.1.16.161hqiotmaster08lapiserver、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico
master10.1.16.162hqiotmaster09lapiserver、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico
worker10.1.16.163hqiotnode12lkubelet、kube-porxy、docker、calico、coredns、ingress-nginx
worker10.1.16.164hqiotnode13lkubelet、kube-porxy、docker、calico、coredns、ingress-nginx
worker10.1.16.165hqiotnode14lkubelet、kube-porxy、docker、calico、coredns、ingress-nginx
vip10.1.16.202 nginx、keeplived
1.1、服务器环境初始化
  1. # 控制节点、工作节点都需要安装
  2. # 1、修改主机名:对应主机名修改
  3. hostnamectl set-hostname master && bash
  4. # 2、添加hosts
  5. cat << EOF >  /etc/hosts <br>10.1.16.160 hqiotmaster07l<br>10.1.16.161 hqiotmaster08l<br>10.1.16.162 hqiotmaster09l<br>10.1.16.163 hqiotnode12l<br>10.1.16.164 hqiotnode13l<br>10.1.16.165 hqiotnode14l<br>EOF<br><br># 3、关闭防火墙<br>systemctl stop firewalld<br>systemctl disable firewalld<br><br># 4、关闭selinux<br>sed -i 's/enforcing/disabled/' /etc/selinux/config<br><br># 5、关闭交换分区
  6. swapoff -a # 临时关闭
  7. 永久关闭<br>vi /etc/fstab<br>#注释这一行:/mnt/swap swap swap defaults 0 0<br>free -m<br>查看swap是否全为0<br><br><br># 6、每台机器都设置 时间同步<br>yum install chrony -y<br>systemctl start chronyd && systemctl enable chronyd<br>chronyc sources<br>
复制代码
 
# 7、创建/etc/modules-load.d/containerd.conf配置文件:
cat  /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
执行以下下令使配置生效:
modprobe overlay
modprobe br_netfilter
 
# 8、将桥接的IPv4流量传递到iptables的链
cat  /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
user.max_user_namespaces=28633
EOF
 
# 9、配置服务器支持开启ipvs的前提条件(如果用istio,请不要开启IPVS模式)
接下来还必要确保各个节点上已经安装了ipset软件包,为了便于查看ipvs的署理规则,最好安装一下管理工具ipvsadm。
yum install -y ipset ipvsadm

由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提必要加载以下的内核模块:ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
在各个服务器节点上执行以下脚本:
cat  /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
赋权:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
上面脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。
 
如果报错modprobe: FATAL: Module nf_conntrack_ipv4 not found.
这是因为使用了高内核,较如博主就是使用了5.2的内核,一样平常教程都是3.2的内核。在高版本内核已经把nf_conntrack_ipv4更换为nf_conntrack了。所以正确配置应该如下
在各个服务器节点上执行以下脚本:

cat  /etc/containerd/config.toml根据文档 Container runtimes 中的内容,对于使用systemd作为init system的Linux的发行版,使用systemd作为容器的cgroup driver可以确保服务器节点在资源紧张的环境更加稳定,因此这里配置各个节点上containerd的cgroup driver为systemd。修改前面生成的配置文件/etc/containerd/config.tomlsed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]  ...  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]    SystemdCgroup = true# 设置aliyun地点,不设置会连接不上sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml[plugins."io.containerd.grpc.v1.cri"]  ...  # sandbox_image = "k8s.gcr.io/pause:3.6"  sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"# 设置Harbor私有仓库vi /etc/containerd/config.toml[plugins."io.containerd.grpc.v1.cri".registry.configs]  [plugins."io.containerd.grpc.v1.cri".registry.configs."10.1.1.167".tls]    insecure_skip_verify = true  [plugins."io.containerd.grpc.v1.cri".registry.configs."10.1.1.167".auth]    username = "admin"    password = "Harbor12345"    [plugins."io.containerd.grpc.v1.cri".registry.mirrors]  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]    endpoint = ["https://registry.aliyuncs.com/google_containers"]  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.1.1.167"]    endpoint = ["https://10.1.1.167"]# 配置containerd开机启动,并启动containerdsystemctl daemon-reloadsystemctl enable --now containerd && systemctl restart containerd# 使用crictl测试一下,确保可以打印出书本信息并且没有错误信息输出:crictl versionVersion:  0.1.0RuntimeName:  containerdRuntimeVersion:  v1.7.14RuntimeApiVersion:  v1[/code]五、安装配置kubernetes

5.1 kubernetes高可用方案

为了能很好的解说Kubernetes集群的高可用配置,我们可以通过一下方案来解答。
在这个方案中,我们通过keepalive+nginx实现k8s apiserver组件高可用。
按照旧的方案,我们以某一个master节点作为主节点,让其余的两个master节点加入,是无法达到集群的高可用的。一旦主master节点宕机,整个集群将处于不可用的状态。


5.2 通过keepalive+nginx实现k8s apiserver高可用

三台master节点,Nginx安装与配置
  1. yum install -y gcc gcc-c++ make
  2. yum install wget net-tools vim* nc telnet-server telnet curl openssl-devel libnl3-devel net-snmp-devel zlib zlib-devel pcre-devel openssl openssl-devel
  3. # 修改linux命令历史记录、ssh关闭时间
  4. vi /etc/profile
  5. HISTSIZE=3000
  6. TMOUT=3600
  7.    
  8. 退出保存,执行
  9. source /etc/profile
复制代码
5.3 使用kubeadm摆设Kubernetes

[code]# 下面在各节点安装kubeadm和kubelet,创建yum源:cat

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表