k8s系列-单Master模式部署
背景
1.本系列k8s文章全部为内网离线部署。
2.全部为root用户执行。
3.k8s版本为1.22.2
k8s-系列目录
案例机器
全部为Linux系统。
IP | 角色 |
---|---|
192.168.31.1 | master |
192.168.31.2 | node01 |
192.168.31.3 | node02 |
一、准备工作
1.配置host
vim /etc/hosts
# 三台机器hosts全部添加如下配置
192.168.31.1 master k8s-master
192.168.31.2 node01 k8s-node01
192.168.31.3 node02 k8s-node02
2.配置时间服务器
因为是内网离线部署,所以三台中选择master机器作为时间同步节点。
master机器上边执行
vim /etc/ntp.conf
# 将server 开头的几行配置全部注释。
# 在配置文件最后方添加如下配置
server 127.127.1.0 perfer
fudge 127.127.1.0 stratum 10
node机器上边执行
vim /etc/ntp.conf
# 将server 开头的几行配置全部注释。
# 在配置文件最后方添加如下配置(master的IP)
server 192.168.31.1
三台机器执行
# 配置文件修改完,执行
systemctl restart ntpd
3.关闭防火墙及swap
关闭防火墙
systemctl disable firewalld && systemctl stop firewalld
关闭swap交互内存
swapoff -a
selinux的关闭
vim /etc/selinux/config
# SELINUX=disabled,然后保存退出。
vim /etc/sysconfig/selinux
# SELINUX=disabled,然后保存退出。
# 检查是否关闭成功,输出Disabled
getenforce
4.ssh互信
三台机器需要做ssh互信,三台机器执行
# 三台机器先都执行完这个命令,再执行下面的
ssh-keygen -t rsa
ssh-copy-id 192.168.31.1
ssh-copy-id 192.168.31.2
ssh-copy-id 192.168.31.3
# 输入yes,密码
5.Docker安装
6.上传离线安装包
# 以下文件都放置在/home/k8s/目录下,node节点只需要前面三个,不需要kube-flannel.yml 文件
flannel #网络插件
k8s-offline-rpm #rpm安装包,这个需要挂载为仓库
kubeadin-offline-image #docker镜像
kube-flannel.yml #flannel的部署清单文件
7.配置bridge-nf-call-iptables
vim /etc/sysctl.d/k8s.conf
# 内容如下
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 修改后执行
sysctl --system
二、导入离线镜像(三台机器执行)
cd /home/k8s/kubeadin-offline-image
for i in `ls /home/k8s/kubeadin-offline-image`;do docker load -i $i;done
三、安装kubeclt\kubeadm等程序(三台机器执行)
1.配置离线安装仓库
vim /etc/yum.repos.d/k8s.repo
# 文件内容如下
[k8s]
name=k8s
baseurl=file:///home/k8s/k8s-offline-rpm
enable=1
gpgcheck=0
2.安装
yum install -y kubeadm-1.22.2 kubelet-1.22.2 kubectl-1.22.2 conntrack-tools libseccomp \
libtool-ltdl device-mapper-persistent-data lvm2
四、集群初始化
master初始化
kubeadm init \
--apiserver-advertise-address=192.168.31.1 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
node节点加入
此处注意:这里使用的命令为master初始化时控制台输出的命令来加入集群
kubeadm join 192.168.31.1:6443 --token 5ecgfe.6hyfhqhp904a3zpv --discovery-token-ca-cert-hash sha256:e9566e2d9dac9727a33f071875427b050b6ebd037545895b85bb1c46f5045548
master配置.kube配置
想要通过命令行来直接管理k8s集群,需要配置.kube.conf,需要在master执行如下命令。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
修复集群一个Bug
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 注释- --port=0 这一行
vim /etc/kubernetes/manifests/kube-scheduler.yaml
# 注释- --port=0 这一行
重启三台机器的kubelet服务:systemctl restart kubelet
查看集群状态
此时的集群应该是NotReady状态,继续往下看。
kubectl get no
五、部署flannel网络插件
cd /home/k8s
kubectl apply -f kube-flannel.yml
chmod a+x flannel
cp flannel /opt/cni/bin/
scp flannel node1:/opt/cni/bin/
scp flannel node2:/opt/cni/bin/
此时,节点应该都为Ready状态。
如果仍为NotReady,可以通过如下命令查看kubelet日志。
journalctl -xeu kubelet -l
journalctl -f -u kubelet
六、常用命令
1.查询加入节点token命令
kubeadm token create --print-join-command
2.重启K8s和docker
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
3.重置集群
三台机器执行(不分先后)
kubeadm reset
# 输入yes
4.查看节点状态
kubectl get no
kubectl get cs
5.安装、更新、卸载应用
kubectl create -f ***.yml
kubectl apply -f ***.yml
kubectl delete -f ***.yml
6.查看日志
# node-ijd182s为容器名称,可协助 -n 输入命名空间
kubectl logs node-ijd182s
7.进入容器
# node-ijd182s为容器名称,可协助 -n 输入命名空间
kubectl exec -it node-ijd182s -- /bin/bash
七、常见问题
应用一直拉取镜像失败
把.yaml中的imagePullPolicy改为:IfNotPresent
解决NotReady问题
node节点执行
mkdir -p /etc/cni/net.d/
master节点执行
scp /etc/cni/net.d/* node1:/etc/cni/net.d/
执行完都执行
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
八、附件
链接: pan.baidu.com/s/1jcBxUktz… 提取码: o099