k8s系列-单Master模式部署

178 阅读3分钟

k8s系列-单Master模式部署

背景

1.本系列k8s文章全部为内网离线部署。

2.全部为root用户执行。

3.k8s版本为1.22.2

k8s-系列目录

k8s-系列教程-目录

案例机器

全部为Linux系统。

IP角色
192.168.31.1master
192.168.31.2node01
192.168.31.3node02

一、准备工作

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安装

k8s系列-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