- 操作系统:Centos7
- 一主两从:角色:k8s-master01 k8s-worker01 k8s-worker02 主机名设置:
- 主机名配置:
master节点
hostnamectl set-hostname k8s-master01
worker01节点
hostnamectl set-hostname k8s-worker01
worker02节点
hostnamectl set-hostname k8s-worker02
- 主机ip地址配置:
k8s-master01节点IP地址为:192.168.20.130/24
k8s-worker01节点IP地址为:192.168.20.131/24
k8s-worker02节点IP地址为:192.168.20.132/24
- 主机名与ip地址解析
# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.20.130 k8s-master01
192.168.20.131 k8s-worker01
192.168.20.132 k8s-worker02
- 防火墙配置(所有主机均需要操作 )
关闭现有防火墙firewalld
systemctl disable firewalld
systemctl stop firewalld
查看firewalld状态
firewall-cmd --state
not running(运行结果)
- SELINUX配置(所有主机均需要操作。修改SELinux配置需要重启操作系统。 )
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sestatus(查看状态)
- 集群节点之间的时间同步(所有主机均需要操作 )
crontab -l
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com
- 升级操作系统内核(如果内核版本比较老的话,建议升级,所有主机均需要操作 )
导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装elrepo YUM源仓库
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64
设置grub2默认引导为0
grub2-set-default 0
重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
更新后,需要重启,使用升级的内核生效。
reboot
重启后,需要验证内核是否为更新对应的版本
uname -r
- 配置内核路由转发及网桥过滤(所有主机均需要操作 )
添加网桥过滤及内核转发配置文件
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
加载br_netfilter模块
modprobe br_netfilter
查看是否加载
lsmod | grep br_netfilter
(以下为显示结果)
br_netfilter 22256 0
bridge 151336 1 br_netfilter
使其生效
sysctl --system
- 安装ipset及ipvsadm(所有主机均需要操作)
安装ipset及ipvsadm
yum -y install ipset ipvsadm
配置ipvsadm模块加载方式
添加需要加载的模块
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
- 关闭SWAP分区(修改完成后需要重启操作系统,如不重启可临时关闭,命令为swapoff -a )
永远关闭swap分区,需要重启操作系统
# cat /etc/fstab
......
# /dev/mapper/centos-swap swap swap defaults 0 0
在上一行中行首添加#
-
Docker-ce及cri-dockerd准备
Docker安装yum源:
添加源:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
Docker安装:
yum -y install docker-ce
启动Docker服务:
systemctl enable --now docker
修改cgroup方式:(/etc/docker/daemon.json 默认没有此文件,需要单独创建)
在/etc/docker/daemon.json添加如下内容
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
重启docker:
systemctl restart docker
cri-dockerd安装
获取安装包:
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14-3.el7.x86_64.rpm
安装:
yum -y install cri-dockerd-0.3.14-3.el7.x86_64.rpm
修改第10行内容:
vim /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.k8s.io/pause:3.9 --container-runtime-endpoint fd://
启动并设置docker自启动:
systemctl start cri-docker
systemctl enable cri-docker
- 集群部署:
使用kubernetes社区YUM源:
cat > /etc/yum.repos.d/k8s.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
#exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
集群软件安装:(所有节点均可安装)
yum -y install kubeadm kubelet kubectl
配置kubelet:
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
设置kubelet为开机自启动:
systemctl enable kubelet
- 集群初始化:
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.20.130 --cri-socket unix:///var/run/cri-dockerd.sock
初始化完成截图:
首先执行:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用kubeadm join 命令加入集群主节点(注意:不能直接复制命令添加,后面要指定容器运行时:--cri-socket unix:///var/run/cri-dockerd.sock)
kubeadm join 192.168.20.130:6443 --token ahtubs.r5sw0j43gv3k0tng --discovery-token-ca-cert-hash sha256:510c4d019c87fc89e67cab32d7cd0e0c8665aff6fd2a15be0fa4773188b7b234 --cri-socket unix:///var/run/cri-dockerd.sock
此时加入会显示NotReady,因为没部署网络插件
下面部署网络插件calico:
第一个可以直接执行
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
第二个要先下载下来需要修改
wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml
vim custom-resources.yaml
把cidr: 192.168.0.0/16 修改为:10.244.0.0/16
执行:
kubectl apply -f custom-resources.yaml
查看pod状态:
kubectl get pods -n calico-system
可以看到网络插件安装后,集群节点都显示了Ready,至此集群安装完成!