💢欢迎来到张翊尘的开源技术站
💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥
文章目录
基于 docker
部署 k8s
集群
操作系统说明
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
硬件配置说明
主机名 | CPU | 内存 | 硬盘 | 角色 |
---|---|---|---|---|
master01 |
2c |
4gb |
100gb |
master |
worker01 |
2c |
4gb |
100gb |
worker |
worker02 |
2c |
4gb |
100gb |
worker |
以上配置信息仅限于测试环境,生产环境请按照实际配置信息进行更改
主机配置
IP
设置
主机名 | IP 地址 |
掩码地址 |
---|---|---|
master01 |
192,168.2.110 |
255.255.255.0 |
worker01 |
192,168.2.110 |
255.255.255.0 |
worker02 |
192,168.2.110 |
255.255.255.0 |
主机名设置
master01
$ hostnamectl set-hostname master01
worker01
$ hostnamectl set-hostname worker01
worker02
$ hostnamectl set-hostname worker02
主机名与 IP
地址解析
所有集群主机均需要进行配置
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.110 master01
192.168.2.111 worker01
192.168.2.112 worker02
防火墙配置
- 停止防火墙
$ systemctl stop firewalld
- 禁止开机自启
$ systemctl disable firewalld
- 查看防火墙状态
$ systemctl status firewalld
SELinux
设置
所有主机均需要操作,配置完毕后需要重启操作系统
$ sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
时间同步配置
- 安装
ntpdate
$ yum -y install ntpdate
- 添加
crontab
定时任务
$ crontab -l
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com
升级操作系统内核
所有主机均需要操作,配置完毕后需要重启操作系统
- 离线安装包
- 安装
$ yum -y localinstall *.rpm
- 查看已安装的
rpm
包
$ rpm -qa | grep kernel
kernel-ml-tools-5.19.9-1.el7.elrepo.x86_64
kernel-ml-devel-5.19.9-1.el7.elrepo.x86_64
kernel-ml-headers-5.19.9-1.el7.elrepo.x86_64
kernel-3.10.0-1160.el7.x86_64
kernel-ml-tools-libs-5.19.9-1.el7.elrepo.x86_64
kernel-ml-doc-5.19.9-1.el7.elrepo.noarch
kernel-ml-tools-libs-devel-5.19.9-1.el7.elrepo.x86_64
kernel-ml-5.19.9-1.el7.elrepo.x86_64
- 设置
grub2
默认引导为0
$ grub2-set-default 0
- 重新生成
grub2
引导文件
$ grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.19.9-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.19.9-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-66603fcac0fd4dfb91292cfc4f8d3f36
Found initrd image: /boot/initramfs-0-rescue-66603fcac0fd4dfb91292cfc4f8d3f36.img
done
- 重启,使用升级的内核生效
reboot
- 验证
$ uname -r
5.19.9-1.el7.elrepo.x86_64
内核转发以及网桥过滤
所有主机均需要操作
- 添加网桥过滤及内核转发配置文件
$ cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
- 加载
br_netfilter
模块
$ modprobe br_netfilter
- 查看是否加载
$ lsmod | grep br_netfilter
- 加载网桥过滤及内核转发配置文件
$ sysctl -p /etc/sysctl.d/k8s.conf
安装 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
容器运行时配置
所有集群主机均需操作
获取 yum
源
- 下载
wget
$ yum -y install wget
- 获取
repo
源文件
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- 查看可安装版本
$ yum list docker-ce.x86_64 --showduplicates | sort -r
安装 docker
$ yum -y install docker-ce
修改 cgroup
方式
# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
启动 docker
服务
- 设置开机自启动
$ systemctl enable docker
- 启动服务
$ systemctl start docker
- 查看
docker
信息
$ docker info
集群部署
软件说明
kubeadm |
kubelet |
kubectl |
---|---|---|
1.21.0 | 1.21.0 | 1.21.0 |
集群所有主机 | 集群所有主机 | 集群所有主机 |
yum
源准备
所有集群主机均需操作
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
软件安装
所有集群主机均需操作
- 查看指定版本
$ yum list kubeadm.x86_64 --showduplicates | sort -r
$ yum list kubelet.x86_64 --showduplicates | sort -r
$ yum list kubectl.x86_64 --showduplicates | sort -r
- 安装指定版本
$ yum -y install --setopt=obsoletes=0 kubeadm-1.21.0-0 kubelet-1.21.0-0 kubectl-1.21.0-0
配置 kubelet
所有集群主机均需操作
- 修改启动项
为了实现
docker
使用的cgroupdriver
与kubelet
使用的cgroup
的一致性,修改如下文件内容
# vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
- 设置开机自启
$ systemctl enable kubelet
镜像准备
所有集群主机均需操作
- 查看镜像列表
$ kubeadm config images list --kubernetes-version=v1.21.0
k8s.gcr.io/kube-apiserver:v1.21.0
k8s.gcr.io/kube-controller-manager:v1.21.0
k8s.gcr.io/kube-scheduler:v1.21.0
k8s.gcr.io/kube-proxy:v1.21.0
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0
- 下载镜像文件
初始化
主节点执行
$ kubeadm init --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.2.110
配置管理文件
主节点执行
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ export KUBECONFIG=/etc/kubernetes/admin.conf
网络准备
主节点执行
- 下载
operator
资源清单文件
$ wget https://docs.projectcalico.org/manifests/tigera-operator.yaml
- 应用资源清单文件
$ kubectl apply -f tigera-operator.yaml
The CustomResourceDefinition "installations.operator.tigera.io" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
如果在应用资源文件时出现如上的错误,执行以下命令:
$ kubectl apply --server-side --force-conflicts -f tigera-operator.yaml
- 通过自定义资源方式安装
$ wget https://docs.projectcalico.org/manifests/custom-resources.yaml
修改 custom-resources.yaml
文件中的 cidr
内容,修改为使用 kubeadm init ... --pod-network-cidr=10.244.0.0/16
对应的 IP
地址段
- 应用资源清单文件
$ kubectl apply -f custom-resources.yaml
calico
客户端安装
$ curl -L https://github.com/projectcalico/calico/releases/download/v3.25.0/calicoctl-linux-amd64 -o calicoctl
- 添加权限
$ chmod +x calicoctl
- 移动到工作目录
$ mv calicoctl /usr/bin/
- 查看版本信息
$ calicoctl version
- 查看运行节点
$ DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes
工作节点添加
- 查看加入集群命令
主节点执行
$ kubeadm token create --print-join-command
- 加入集群
工作节点执行
$ kubeadm join 192.168.2.110:6443 --token hj32q7.4kmg2iyfc8mo1wg6 --discovery-token-ca-cert-hash sha256:eeb5322efb0cd1db878aaba9695ea1ec9b9d739fda8bd8a86daf91f8809d8d98
验证集群可用性
主节点执行
- 查看所有的节点
$ kubectl get node
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 56m v1.21.0
worker01 Ready <none> 88s v1.21.0
worker02 Ready <none> 85s v1.21.0
- 查看集群
pod
运行情况
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
calico-apiserver calico-apiserver-7c5b4645c9-6p5sw 1/1 Running 0 17m
calico-apiserver calico-apiserver-7c5b4645c9-9rg7q 1/1 Running 0 17m
calico-system calico-kube-controllers-8fdfc695-5jvcg 1/1 Running 0 43m
calico-system calico-node-6bjng 1/1 Running 0 84s
calico-system calico-node-7bldx 1/1 Running 0 32m
calico-system calico-node-tlpwc 1/1 Running 0 81s
calico-system calico-typha-65fd656dc8-cjpsb 1/1 Running 0 80s
calico-system calico-typha-65fd656dc8-xxxhz 1/1 Running 0 43m
calico-system csi-node-driver-8wg8z 2/2 Running 0 71s
calico-system csi-node-driver-b88lj 2/2 Running 0 74s
calico-system csi-node-driver-n2ffg 2/2 Running 0 21m
kube-system coredns-558bd4d5db-5zl67 1/1 Running 0 56m
kube-system coredns-558bd4d5db-zw96d 1/1 Running 0 56m
kube-system etcd-master01 1/1 Running 0 56m
kube-system kube-apiserver-master01 1/1 Running 0 56m
kube-system kube-controller-manager-master01 1/1 Running 0 56m
kube-system kube-proxy-9llkd 1/1 Running 0 56m
kube-system kube-proxy-fbwkd 1/1 Running 0 84s
kube-system kube-proxy-tpmsf 1/1 Running 0 81s
kube-system kube-scheduler-master01 1/1 Running 0 56m
tigera-operator tigera-operator-cffd8458f-fr6px 1/1 Running 1 53m
🌺🌺🌺撒花!
如果本文对你有帮助,就点关注或者留个👍
如果您有任何技术问题或者需要更多其他的内容,请随时向我提问。