可看可不看的内容
首先本手册是一个完整部署的过程 非最优解决方案
若你已经部署过多次 你可以直接看目录来进行K8s的安装部署
环境要求
尽量使用静态IP 若你使用的是公有云产品 例如 腾讯云 阿里云 华为云 AWS AZ 类似的产品即可不关注这部分
| 主机名 |
IP |
| k8s-master-node1 |
10.0.4.13 |
| k8s-worker-node1 |
10.0.4.10 |
环境准备 两台设备都需要执行
第一步:设置Hosts
修改主机名
1 2 3 4
| 在 10.0.4.13 上执行如下: hostnamectl set-hostname k8s-master-node1 && bash 在 10.0.4.10 上执行如下: hostnamectl set-hostname k8s-worker-node1 && bash
|
根据环境要求的主机名或**你自己准备的主机名IP 来进行配置 ** 文件大致内容
/etc/hosts
1 2 3 4 5 6 7 8
| 127.0.0.1 localhost.localdomain localhost 127.0.0.1 localhost4.localdomain4 localhost4
::1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6
10.0.4.13 k8s-master-node1 10.0.4.10 k8s-worker-node1
|
第二步:关闭防火墙和Swap及Selinux
可以直接复制粘贴到机器
1 2 3 4 5 6 7 8 9 10 11 12
| systemctl stop firewalld systemctl disable firewalld
setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a yes | cp /etc/fstab /etc/fstab_bak cat /etc/fstab_bak |grep -v swap > /etc/fstab
|
第三步:修改机器内核参数
可以直接复制粘贴到机器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF
sudo modprobe overlay sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
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
sysctl --system
|
第四步:安装容器运行时
安装运行时
安装Docker
1 2 3 4
| yum install -y yum-utils yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo yum install docker-ce -y
|
启动Docker
1
| systemctl enable docker --now
|
此时运行时已经启动
设置运行时
生成containerd 的默认配置文件
1
| containerd config default > /etc/containerd/config.toml
|
对文件进行修改
vim /etc/containerd/config.toml
找到这两行
1 2 3 4 5 6 7
| containerd config default | \ sed -e 's|registry\.k8s\.io/pause:[0-9.]\+|registry\.aliyuncs\.com/google_containers/pause:3.9|g' \ -e 's,SystemdCgroup = .*,SystemdCgroup = true,' \ -e 's/\[plugins."io.containerd.grpc.v1.cri".registry.mirrors\]/&\n \[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n endpoint = \["https:\/\/mirror.ccs.tencentyun.com"]\n/' \ -e 's/\[plugins."io.containerd.grpc.v1.cri".registry.mirrors\]/&\n \[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]\n endpoint = \["https:\/\/registry\.aliyuncs\.com\/google_containers"]/' \ -e '/^\s*$/d' | tee /etc/containerd/config.toml
|
以下是具体修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| sandbox_image = "registry.k8s.io/pause:3.6"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
SystemdCgroup = false
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://mirror.ccs.tencentyun.com"] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"] endpoint = ["https://registry-k8s-io.mirrors.sjtug.sjtu.edu.cn"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://mirror.ccs.tencentyun.com"]
|
最后成品应该是这样 请不要用Tab替换空格

第五步:设置镜像站
/etc/docker/daemon.json
1 2 3 4 5 6
| cat <<EOF > /etc/docker/daemon.json { "registry-mirrors":["https://mirror.ccs.tencentyun.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF
|
/etc/yum.repos.d/kubernetes.repo
1 2 3 4 5 6 7 8 9
| 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=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 EOF
|
若你是其他版本的架构请自行修改x86_64 为目标架构
第六步:安装程序包
1 2
| yum install -y kubelet kubectl kubeadm systemctl enable kubelet
|
修改Kubelet 运行时
1 2 3
| crictl config runtime-endpoint /var/run/containerd/containerd.sock crictl config image-endpoint /var/run/containerd/containerd.sock systemctl restart containerd
|
第七步:升级内核
1 2 3 4 5 6 7
| rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y sed -i "s#http://elrepo.org/linux#https://mirrors.tuna.tsinghua.edu.cn/elrepo#g" /etc/yum.repos.d/elrepo.repo yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64 grub2-set-default 0 grub2-mkconfig -o /boot/grub2/grub.cfg reboot
|
初始化程序
获取初始化配置文件
1 2 3 4
| kubeadm config print init-defaults > init.yaml
kubeadm init --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.0.4.13 --image-repository=registry.aliyuncs.com/google_containers
|
| 需要修改的参数 |
填写值 |
参考值 |
| advertiseAddress |
填写Master的IP地址 |
10.0.4.13 |
| name |
填写Master的主机名 |
k8s-master-node1 |
| imageRepository |
填写镜像拉取值 |
registry.aliyuncs.com/google_containers |
| podSubnet |
默认没有需要新增 |
10.244.0.0/16 |
参考修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 10.0.4.13 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: k8s-master-node1 taints: null --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: 1.28.0 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 scheduler: {}
|
初始化
1
| kubeadm init --config=init.yaml
|
初始化完成大概这个样子

设置Kubectl
1 2 3
| mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
设置补齐
1 2 3
| echo "source <(kubectl completion bash)" >> ~/.bashrc echo "source <(kubeadm completion bash)" >> ~/.bashrc echo "source <(istioctl completion bash)" >> ~/.bashrc
|
配置CNI网络插件
[calico]: https://github.com/projectcalico/calico “calico”
1 2
| kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml
|
https://github.com/flannel-io/flannel
1
| kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
|