centos7安装k8s 1.25.5
前言
这是开发测试环境的安装教程,不适用于生产,生产需要考虑master高可用。参考的官方文档:https://v1-25.docs.kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
环境准备
三台机器,配置4核8G,100G硬盘
系统:CentOS Linux release 7.8.2003 (Core)
内核:Linux master 3.10.0-1127.19.1.el7.x86_64
Ip:10.17.203.44、10.17.203.45、10.17.203.46
规划:一个master节点,两个node节点,即:
10.17.203.44-master,
10.17.203.45-node-1,
10.17.203.46-node-2
注意:此次安装的版本为1.25.5,容器运行时为containerd,官方建议升级内核版本到较新版本,但是我没有升级也成功了
必要设置(所有机器都执行)
修改主机名
永久有效:hostnamectl set-hostname xxx
,分别将三台机器设置为master、node01、node02, 向三台机器添加hosts文件,路径:/etc/hosts
,内容:
10.17.203.44 master
10.17.203.45 node01
10.17.203.46 node02
修改完成后,重启机器:reboot
关闭swap分区
注释/etc/fstab中关于swap的配置:
注释后执行以下命令:# echo vm.swappiness=0 >> /etc/sysctl.conf
完成后重启: # reboot
验证(swap行均为0):# free -m
关闭防火墙
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
设置时间:
修改成正确时间,时间正确可以忽略
[root@master ~]# timedatectl set-time "2023-03-07 10:50:00"
设置SELinux
[root@master ~]# setenforce 0
[root@master ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
转发 IPv4 并让 iptables 看到桥接流量
通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载。
加载此模块,设置配置:
[root@master ~]#
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
[root@master ~]# sysctl --system
加载相关模块(注:后面要是init的时候发现报相关的预检查错误,可以再执行一下下面的命令)
[root@master ~]# sudo modprobe br_netfilter
[root@master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
配置IPVS
[root@master ~]# vim /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
保存执行:
[root@master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules
[root@master ~]# sh /etc/sysconfig/modules/ipvs.modules
安装containerd(所有机器)
选取containerd作为容器运行时,版本为1.6.16
安装必要工具
[root@master ~] yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息
[root@master ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看相关版本并安装
[root@master ~]# yum list containerd.io --showduplicates | sort -r
安装指定版本
[root@master ~]# yum install -y containerd.io-1.6.16-3.1.el7.x86_64
生成默认配置文件:
[root@master ~]# mkdir -p /etc/containerd
[root@master ~]# containerd config default > /etc/containerd/config.toml
替换默认pause镜像地址
[root@master ~]# sed -i 's#registry.k8s.io#registry.aliyuncs.com/google_containers#' /etc/containerd/config.toml
配置systemd作为容器的cgroup driver
[root@master ~]# sed -i 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml
修改存储位置
[root@master ~]# sed -i 's#/var/lib/containerd#/data/containerd#' /etc/containerd/config.toml
修改仓库配置文件位置
[root@master ~]# sed -i 's#config_path = ""#config_path = "/etc/containerd/certs.d"#' /etc/containerd/config.toml
注意:此处需要创建文件夹:[root@master ~]# mkdir -p /etc/containerd/certs.d
配置私有仓库:
例如:仓库地址ip:10.15.98.150,新建文件夹:
[root@master ~]# mkdir -p /etc/containerd/certs.d/10.15.98.150
进入文件夹创建文件:hosts.toml,文件内容:
[host."http://10.15.98.150:80"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
启动containerd和配置开机启动
[root@master ~]# systemctl restart containerd
[root@master ~]# systemctl enable containerd
查看版本信息
[root@master ~]# ctr version
[root@master ~]# containerd --version
安装kubeadm,kubelet和kubectl
安装组件(三台机器)
kubeadm:快速创建集群的工具
kubelet:这是一个需要在所有集群中机器上安装的组件,它用于执行开启Pod和容器等操作。
kubectl:与集群通信的命令行工具,官方提供的CLI。
国内无法访问官方源,所以又通过阿里云的。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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命令安装kubeadm和相关工具,并运行kubelet。
[root@master ~]# yum install -y kubeadm-1.25.5-0.x86_64 kubelet-1.25.5-0.x86_64 kubectl-1.25.5-0.x86_64 --disableexcludes=kubernetes
注:默认安装最新版本,查看历史版本命令:
[root@master ~]# yum list kubelet --showduplicate
启动kubelet
[root@master ~]# systemctl enable --now kubelet
初始化主机节点(仅master节点,10.17.203.44)
执行命令:
[root@master ~]# kubeadm init --pod-network-cidr=192.168.0.0/16 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.25.5
其中—image-repository是指定镜像仓库,使用的阿里镜像仓库,等待以上命令完成。成功示意图:
记录下kubeadm jion …等后面的完整命令,后续需要用到
如果是非root用户,则需要依次运行以下命令:
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果是root用户,则直接运行:
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
注:export当次有效,断了连接之后再执行kubectl命令可能会报错:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
可以放到/etc/profile文件中,在文件末尾添加以上命令(export KUBECONFIG=/etc/kubernetes/admin.conf),保存后执行:
[root@master ~]# source /etc/profile
安装网络组件(仅master)
选择的是calico组件,官网地址:https://docs.tigera.io/calico/3.25/getting-started/kubernetes/quickstart
涉及到的文件:
calico.yaml
custom-resources.yaml
[root@master ~]# kubectl create -f calico.yaml
[root@master ~]# kubectl create -f custom-resources.yaml
等待安装完成,网络可能有点慢,实时监控是否完成,所有的pod都running之后就OK,有条件的可以将文件里面涉及到的镜像提前下载下来
[root@master ~]# watch kubectl get pods -n calico-system
加入工作节点(所有node)
在node节点上面执行master安装成功时,命令行中打印的kubeadm join命令,命令格式:kubeadm join --token : --discovery-token-ca-cert-hash sha256:,示例:
[root@master ~]# kubeadm join 10.17.203.44:6443 --token 2ttvnv.iq4q0zp91rwghcpt \ --discovery-token-ca-cert-hash sha256:9fc6ec4dca662648e9936ed029b87a7b6cc1baa0cec24fbb00b2b49e584de476
token如果忘记了,可以在master中执行以下命令获取:
[root@master ~]# kubeadm token list
输出如下:
默认情况下,token有效期24小时,过期后可以重新生成,命令如下:
[root@master ~]# kubeadm token create
如果你没有 --discovery-token-ca-cert-hash
的值,则可以在master中执行以下命令:
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
查看集群节点状态:
所有节点都处于ready状态。
查看pod状态:
[root@master ~]# kubectl get pods --all-namespaces
如果所有Pod都处于Running状态,说明集群正常运行
启用IPVS代理模式(master节点)
在master节点修改ConfigMap的kube-system/kube-proxy中的模式(mode)为ipvs
[root@master ~]# kubectl edit cm kube-proxy -n kube-system
重启kube-proxy:
[root@master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
查看kube-proxy的日志:
[root@master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl logs "$1" -n kube-system")}'
至此,整个安装过程完成