目录
环境说明
环境初始化
1.主机名解析
2.时间同步(麒麟系统自带了chronyd)
3.禁用iptables和firewalld
4. 禁用selinux(linux下的一个安全服务,必须禁用)
5.禁用swap分区(主要是注释最后一行)
6.修改系统的内核参数
7.配置ipvs功能
8.重启服务器
安装docker(略)
安装k8s
k8s组件
准备镜像
master操作
在node上操作
安装网络插件calico
麒麟系统的内核: 4.19.90-25.2.v2101.gfb01.ky10.aarch64
Docker : v 20.10.7
k8s:v1.23.4
另外,k8s部署的服务器内存建议预留大一些。
准备相关的包:ipvsadm包(ipvsadm),
docker的二进制包(docker-二进制包),
k8s组件的rpm包(k8s-rpm),
k8s相关的镜像文件(k8s-image),
k8s环境的依赖项(k8s-dependency),
配置文件(yaml),
未部署过k8s的环境,在部署过程中系统会提示缺少一些依赖项,相关的依赖项放置在k8s-dependency中。
本次部署基于两台银河麒麟v10计算机,一台作为k8s的调度节点master,一台作为k8s的工作节点node
环境初始化可脚本化
vim /etc/hosts
192.168.0.190 master
192.168.0.193 node
systemctl start chronyd //开启时间同步
systemctl enable chronyd //设置时间同步开机自启
date //验证
systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables
vim /etc/selinux/config
SELINUX=disabled
vim /etc/fstab
UUID=455cc753-7a60-4c17-a424-7741728c44a1 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
# /dev/mapper/centos-swap swap swap defaults 0 0 //注释这条
vim /etc/sysctl.d/kubernetes.conf
添加以下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
重新加载配置:
sysctl -p
加载网桥过滤模块:
modprobe br_netfilter
查看网桥过滤模块是否加载成功:
lsmod | grep br_netfilter
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的,
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块。
麒麟系统自带了Ipset,因此安装ipvsadm:
rpm -ivh ipvsadm-1.31-2.ky10.aarch64.rpm
做软连接:
ln -sf /usr/lib64/libLLVM-7.so /usr/lib64/libLLVM-7.0.0.so
添加需要加载的模块写入脚本文件:
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
EOF
为脚本文件添加执行权限:
chmod +x /etc/sysconfig/modules/ipvs.modules
执行脚本文件:
/bin/bash /etc/sysconfig/modules/ipvs.modules
查看对应的模块是否加载成功:
lsmod | grep -e ip_vs -e nf_conntrack
上述操作修改了很多系统的配置文件,必须重启,不能省略。
rpm -ivh *.rpm
可能会提示缺少conntrack和socat依赖项:
需要安装k8s-dependency下的包:
rpm -ivh *.rpm --nodeps --force
重新安装k8s的组件rpm包:
rpm -ivh *.rpm
vim /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" #亲测主必须使用systemd,不然后续初始化会报错
KUBE_PROXY_MODE="ipvs"
KUBELET_CGROUP_ARGS="--cgroup-driver=cgroupfs" #从
KUBE_PROXY_MODE="ipvs
设置kubelet开机自启
systemctl enable kubelet
rpm -qa | grep kube
(k8s组件及网络插件calico及界面管理工具kuboard)
加载k8s集群镜像(在镜像所在的文件夹执行下面的命令):
给dockerload.sh文件添加执行权限并运行:
chmod +x dockerload.sh
./dockerload.sh
docker images查看镜像加载结果:
k8s.gcr.io/coredns需要重打标签:
docker tag k8s.gcr.io/coredns:1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
创建集群:
kubeadm init \
--kubernetes-version=v1.23.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.0.190
出现集群创建成功:
按照提示进行操作:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
把创建集群最下面的命令粘贴过来
出现可以使用kubectl get nodes查看节点信息证明集群初步搭建好了
另外加入节点时,需要相应的kubeadm join命令,可能会有没有及时记下集群初始化的命令或者过了几天后又需要增加节点的情况,临时生成的token只有24小时时效,使用kubeadm token list查看token没有结果时,说明token过期,需要重新生成:
kubeadm token create --print-join-command (生成临时的token,若生成永久token,再加上 --ttl=0)
net.ipv4.ip_forward=0需要将其值改为1,具体修改在/proc/sys/net/ipv4/ip_forward文件
加载calico镜像(在master,node1上均加载):
docker load < calico_cni_v3.22.0.tar
docker load < calico_kube-controllers_v3.22.0.tar
docker load < calico_node_v3.22.0.tar
docker load < calico_pod2daemon-flexvol_v3.22.0.tar
docker load -i coredns_v1.8.6.tar
kubectl apply -f calico.yaml
kubectl get pod -n kube-system
完成