可看可不看的内容

首先本手册是一个完整部署的过程 非最优解决方案

若你已经部署过多次 你可以直接看目录来进行K8s的安装部署

环境要求

尽量使用静态IP 若你使用的是公有云产品 例如 腾讯云 阿里云 华为云 AWS AZ 类似的产品即可不关注这部分

主机名IP
k8s-master-node110.0.4.13
k8s-worker-node110.0.4.10

环境准备 两台设备都需要执行

第一步:设置Hosts

修改主机名

在 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
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

可以直接复制粘贴到机器
# 关闭 防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 关闭 swap 进行配置备份
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab

第三步:修改机器内核参数

可以直接复制粘贴到机器
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
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
systemctl enable docker --now

此时运行时已经启动

设置运行时

生成containerd 的默认配置文件

containerd config default > /etc/containerd/config.toml

对文件进行修改

vim /etc/containerd/config.toml

找到这两行

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

以下是具体修改

# 原文本 
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"]
# 若你使用的不是腾讯云机器 请将以下两行删除 或将 https://mirror.ccs.tencentyun.com 替换为其他的国内docker镜像
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  endpoint = ["https://mirror.ccs.tencentyun.com"]

最后成品应该是这样 请不要用Tab替换空格

image-20240216114948924

第五步:设置镜像站

/etc/docker/daemon.json
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
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64
gpgcheck=0
EOF

若你是其他版本的架构请自行修改x86_64 为目标架构

第六步:安装程序包

yum install -y kubelet kubectl kubeadm
systemctl enable kubelet

修改Kubelet 运行时

crictl config runtime-endpoint /var/run/containerd/containerd.sock
crictl config image-endpoint /var/run/containerd/containerd.sock
systemctl restart containerd

第七步:升级内核

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

初始化程序

获取初始化配置文件
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
参考修改
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: {}

初始化

kubeadm init --config=init.yaml

初始化完成大概这个样子

image-20240217004353884

设置Kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

设置补齐

echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "source <(kubeadm completion bash)" >> ~/.bashrc
echo "source <(istioctl completion bash)" >> ~/.bashrc

配置CNI网络插件

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
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
最后修改:2024 年 02 月 17 日
如果觉得我的文章对你有用,请随意赞赏