kubernetes集群部署

集群各节点:

主机名IP地址角色操作系统硬件配置
master192.168.100.10管理节点Rocky Linux 9.42core/4G内存/50G
node1192.168.100.13工作节点Rocky Linux 9.42core/4G内存/50G
node2192.168.100.14工作节点Rocky Linux 9.42core/4G内存/50G

一、操作系统准备

配置/etc/hosts文件(全部节点)

 vim /etc/hosts
 192.168.100.10  master
 192.168.100.13  node1
 192.168.100.24  node2

关闭防火墙与selinux(全部节点)

配置国内系统镜像源和安装epel源(全部节点)

 # 配置国内系统镜像源
 sed -e 's|^mirrorlist=|#mirrorlist=|g' \
  -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
  -i.bak \
  /etc/yum.repos.d/rocky-*.repo
  
 # 安装epel源
 vim /etc/yum.repos.d/epel.repo
 [epel]
 name=Extra Packages for Enterprise Linux $releasever - $basearch
 # It is much more secure to use the metalink, but if you wish to use a local mirror
 # place its address here.
 #baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/
 #metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
 baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/
 enabled=1
 gpgcheck=1
 countme=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
 ​
 [epel-debuginfo]
 name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
 # It is much more secure to use the metalink, but if you wish to use a local mirror
 # place its address here.
 #baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug/
 #metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
 baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/debug/
 enabled=0
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
 gpgcheck=1
 ​
 [epel-source]
 name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
 # It is much more secure to use the metalink, but if you wish to use a local mirror
 # place its address here.
 #baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/
 #metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
 baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/source/tree/
 enabled=0
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
 gpgcheck=1

开启时钟同步(全部节点)

 systemctl restart chronyd
 systemctl enable chronyd
 hwclok -w

修改系统最大打开文件数(全部节点)

 vim /etc/security/limits.conf
 # 在文件最末尾,# End of file上面添加
 * soft nofile 65535
 * hard nofile 65535
 # End of file

修改内核参数(全部节点)

 vim /etc/sysctl.conf
 net.ipv4.tcp_syncookies = 1 
 net.ipv4.tcp_max_tw_buckets = 20480 
 net.ipv4.tcp_max_syn_backlog = 20480
 net.core.netdev_max_backlog = 262144
 net.ipv4.tcp_fin_timeout = 20
 ​
 ​
 sysctl -p

关闭swap(全部节点)

 sed -ri 's/.*swap.*/#&/' /etc/fstab
 ​
 swapoff -a

安装系统性能分析工具和其他(全部节点)

 yum install -y gcc autoconf sysstat

开启bridge网桥过滤(全部节点)

 # 在/etc/sysctl.d/目录下创建一个新文件
 vim /etc/sysctl.d/k8s.conf
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 net.ipv4.ip_forward = 1
 ​
 # 加载配置文件,使其生效
 sysctl -p /etc/sysctl.d/k8s.conf
 ​
 # 加载br_netfilter模块,并查看
 modprobe br_netfilter && lsmod | grep br_netfilter

二、docker环境准备

配置阿里云docker源(全部节点)

yum install -y yum-utils

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker(全部节点)

# 查看可用的docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r

# 找到25.0.5-1.el9安装版本
yum -y install docker-ce-25.0.5-1.el9

配置Docker Cgroup控制组(全部节点)

{
 "exec-opts": ["native.cgroupdriver=systemd"]
}
vim /etc/docker/daemon.json
{
        "registry-mirrors": [
                "https://docker.m.daocloud.io",
                "https://dockerproxy.com",
                "https://docker.mirrors.ustc.edu.cn",
                "https://docker.nju.edu.cn"
        ],
        "exec-opts": ["native.cgroupdriver=systemd"]
}

启动docker(全部节点)

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

三、配置cri-docker

下载cri-docker(全部节点)

wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz

解压到/usr/local/bin/(全部节点)

tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/

下载cri-docker service文件与socket文件(全部节点)

wget -O /etc/systemd/system/cri-docker.service https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service

wget -O /etc/systemd/system/cri-docker.socket https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket

编辑cri-docker.server文件(全部节点)

vim /etc/systemd/system/cri-docker.service
# 修改ExecStart行内容
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --cri-dockerd-root-directory=/var/lib/docker

编辑cri-docker.socket文件(全部节点)

vim /etc/systemd/system/cri-docker.socket
# 修改ListenStream行内容
ListenStream=/var/run/cri-dockerd.sock

启动cri-docker并设置开机自启(全部节点)

systemctl restart cri-docker
systemctl enable cri-docker

四、部署kubernetes集群

配置kubernetes源(全部节点)

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

安装集群所需软件包kubelet kubeadm kubectl(全部节点)

yum -y install kubelet kubectl kubeadm

配置k8s Cgoup控制组(全部节点)

vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

配置kubelet自启动(全部节点)

systemctl restart kubelet
systemctl enable kubelet

初始化集群(master节点)

# 打印master节点所需的镜像文件
kubeadm config images list

# 打印集群初始化配置文件
kubeadm config print init-defaults > kubeadm-config.yaml

# 修改参数
vim kubeadm-config.yaml
......
advertiseAddress: 192.168.100.10   # 修改,集群初始化的master节点IP
......
 criSocket: unix:///var/run/cri-dockerd.sock # 修改使用docker
 ......
 name: master # 修改节点名称
 ......
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers # 修改使用阿里云镜像仓库
......
# 注意:修改以上标记的位置即可

# 使用配置文件初始化
kubeadm init --config kubeadm-config.yaml --upload-certs # 初始化生成的内容建议复制保存到一个文件里,后面有用

# 初始化完成后运行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

工作节点加入初始化集群(在两个工作节点运行)

# 该命令在初始化后会生成,只需在命令后面加上--cri-socket=unix:///var/run/cri-dockerd.sock即可
kubeadm join 192.168.100.10:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:f3fbdf1cd4d9dd036819653a2e25f8a61334bfd865a6e760644486267dcae144 --cri-socket=unix:///var/run/cri-dockerd.sock

下载calico文件(master节点)

wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml

创建calico网络(master节点)

kubectl apply -f calico.yaml

查看部署状况(master节点)

# 查看集群各节点状态
NAME     STATUS   ROLES           AGE    VERSION
master   Ready    control-plane   2d3h   v1.28.15
node1    Ready    <none>          2d3h   v1.28.15
node2    Ready    <none>          2d3h   v1.28.15
# 状态必须都是Ready

# 查看k8s集群的各组件
kubectl get po -n kube-system
NAME                                      READY   STATUS    RESTARTS      AGE
calico-kube-controllers-9d57d8f49-sd45z   1/1     Running   4 (11m ago)   2d3h
calico-node-4tzp5                         1/1     Running   1 (10m ago)   2d3h
calico-node-hgn9j                         1/1     Running   1 (11m ago)   2d3h
calico-node-sps7n                         1/1     Running   4 (11m ago)   2d3h
coredns-6554b8b87f-j4m6b                  1/1     Running   4 (11m ago)   2d3h
coredns-6554b8b87f-jknsd                  1/1     Running   4 (11m ago)   2d3h
etcd-master                               1/1     Running   1 (11m ago)   2d3h
kube-apiserver-master                     1/1     Running   1 (11m ago)   2d3h
kube-controller-manager-master            1/1     Running   1 (11m ago)   2d3h
kube-proxy-knlmm                          1/1     Running   1 (11m ago)   2d3h
kube-proxy-t6glq                          1/1     Running   1 (10m ago)   2d3h
kube-proxy-tcfm4                          1/1     Running   4 (11m ago)   2d3h
kube-scheduler-master                     1/1     Running   1 (11m ago)   2d3h
# 必须是全1,Running状态

更多推荐