赞
踩
主1:192.168.116.17
主2:192.168.116.18
从1:192.168.116.12
从2:192.168.116.13
注意事项:
master节点的cpu核心数必须要求大于2
K8S最新版本并不一定是最好的,相对于旧版本,核心功能稳定,但是新增功能、接口相对不稳
宿主机尽量升级到centos7.9版本
内核kernel升级到4.19+这种稳定的内核
- //所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
- sed -i 's/enforcing/disabled/' /etc/selinux/config
- iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
-
- swapoff -a #交换分区必须要关闭
- sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
-
- #加载 ip_vs 模块
- for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
-
- //修改主机名
- hostnamectl set-hostname master01
- hostnamectl set-hostname master02
- hostnamectl set-hostname node01
- hostnamectl set-hostname node02
-
- //所有节点修改hosts文件
- cat >> /etc/hosts << EOF
- 192.168.116.17 master01
- 192.168.116.18 master02
- 192.168.116.12 node01
- 192.168.116.13 node02
- EOF
-
- //调整内核参数
- cat > /etc/sysctl.d/kubernetes.conf << EOF
- #开启网桥模式,可将网桥的流量传递给iptables链
- net.bridge.bridge-nf-call-ip6tables=1
- net.bridge.bridge-nf-call-iptables=1
- #关闭ipv6协议
- net.ipv6.conf.all.disable_ipv6=1
- net.ipv4.ip_forward=1
- EOF
-
- //生效参数
- sysctl --system
-
- //时间同步
- ntpdate ntp.aliyun.com

- yum install -y yum-utils device-mapper-persistent-data lvm2
-
- yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
- yum install -y docker-ce docker-ce-cli containerd.io
-
-
-
- mkdir /etc/docker
- cat > /etc/docker/daemon.json <<EOF
- {
- "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
- "exec-opts": ["native.cgroupdriver=systemd"],
- "log-driver": "json-file",
- "log-opts": {
- "max-size": "500m", "max-file": "3"
- }
- }
- EOF
-
-
-
-
- systemctl start docker.service
-
- systemctl enable docker.service
-
-
- docker info | grep "Cgroup Driver"

- 使用阿里云的镜像资源去安装更快
- //定义kubernetes源
- cat > /etc/yum.repos.d/kubernetes.repo << EOF
- [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
- enabled=1
- gpgcheck=0
- repo_gpgcheck=0
- gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- EOF
-
- yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15
-
-
- //开机自启kubelet
- systemctl enable kubelet.service
- #K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

准备master高可用
192.168.116.14
192.168.116.15
- 在二进制部署中使用的负载均衡服务器上修改配置文件
- vim /etc/nginx/nginx.conf
-
- stream {
- upstream k8s-apiservers {
- server 192.168.116.17:6443;
- server 192.168.116.18:6443;
- }
-
- ip a 查看VIP地址
在master和node节点中都进行以下命令
- cd /opt
- mkdir k8s
- 单独在master01
-
- cd k8s
-
- 初始化kubeadm
- 方法一:
- kubeadm config print init-defaults > ./kubeadm-config.yaml
-
- vim kubeadm-config.yaml
- 12行修改:advertiseAddress: 192.168.116.17 #设置master01地址
- 22行添加: certSANs:
- 23 - 192.168.116.17
- 24 - 192.168.116.18
- 25 - 192.168.116.200
- #设置证书的主机列表
- 30行更改: controlPlaneEndpoint: "192.168.116.200:6443"
- #主控节点的入口,指定VIP地址:6443
- 37行更改:imageRepository:registry.cn-hangzhou.aliyuncs.com/google_containers
- #默认是k8s.gcr.io,更换成阿里云镜像
- 39行更改:kubernetesVersion: v1.20.15
- #更改K8S版本
- 42行更改:serviceSubnet: 10.96.0.0/16
- #指定service网段
- 43行添加: podSubnet: "10.244.0.0/16"
- #指定pod网段,10.244.0.0/16用于匹配flannel默认网段
- 在最末行添加:---
- apiVersion: kubeproxy.config.k8s.io/v1alpha1
- kind: KubeProxyConfiguration
- mode: ipvs
-

至此K8S初始化配置完成
查看初始化需要的镜像
kubeadm config images list --kubernetes-version 1.20.15
在线拉取镜像
kubeadm config images pull --config /opt/k8s/kubeadm-config.yaml
拉取完后将yaml文件发送给master节点也进行拉取
scp kubeadm-config.yaml master02:/opt/k8s
只在master中拉取镜像,node节点不需要因为它加入到集群中会自动拉取
初始化 master01
- kubeadm init --config=./kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
-
- --upload-certs 参数可以在后续执行加入节点时自动分发证书文件
- tee kubeadm-init.log 用以输出日志
- 若初始化失败,进行的操作
- kubeadm reset -f
- ipvsadm --clear
- rm -rf ~/.kube
- 再次进行初始化
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- cd
- cd .kube/
- vim config
在master01初始化生效后,会在上面生成下面图中的命令
将master02加入集群中,在master02上,将下方图片里划出的命令复制到02节点中执行
执行成功后,回到master01上
- kubectl get nodes #查看集群中的节点
-
- 显示notready是因为还没有下载网络插件
用上述方法将所有node节点加入到集群中
目前为止master和node节点都部署好了
node01 节点上操作
上传flannel软件包到/opt/k8s
- cd /opt/k8s
-
- unzip flannel-v0.21.5.zip
- docker load -i flannel-cni-plugin.tar
- docker load -i flannel.tar
- mkdir /opt/cni/bin
- tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin
将node01的k8s目录中的所有.tar文件包复制给node02节点里
- cd /opt/k8s
- scp *.tar node02:/opt/k8s
进入node02节点
- docker load -i flannel-cni-plugin.tar
- docker load -i flannel.tar
-
- docker images
再将node01的插件目录复制到node02节点中
- 进入node01
- cd /opt
- scp -r cni/ node02:/opt
将node01的yml文件复制到master节点中
scp kube-flannel.yml master01:/opt/k8s
在master执行yml文件
- kubectl apply -f kube-flannel.yml
- 会自动创建flannel所需要的资源
检查部署是否成功
kubectl get pods -n kube-flannel -owide
当显示node01和node02节点都为running时,即为部署成功
- 此时使用kubectl get nodes查看
- 两个节点都为reday
- 此时k8s集群都为正常了
同时也会在每个安装了flannel插件的节点上自动生成一个flannel.1的一个接口
ifconfig
kubeadm init:在使用kubeadm方式安装K8S集群时,可根据初始化配置文件或配置参数选项快速的初始化生成一个K8S的master管理平台 kubeadm join:根据kubeadm init初始化的提示信息快速的将一个node节点或其它master节点加入到K8S集群里
1)所有节点进行初始化,安装容器引擎、kubeadm、kubelet、kubectl,部署 nginx/haproxy 负载均衡器和 keepalived 高可用 2)执行 kubeadm config print init-defaults 命令生成K8S集群初始化配置文件并进行修改 3)执行 kubeadm init --config 指定初始化配置文件进行K8S集群的初始化,生成K8S的master管理控制节点 4)在其它节点执行 kubeadm join 命令将node节点或其它master节点加入到K8S集群里 5)安装 cni 网络插件(flannel或calico)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。