可看可不看的内容
首先本手册是一个完整部署的过程 非最优解决方案
若你已经部署过多次 你可以直接看目录来进行K8s的安装部署
环境要求
尽量使用静态IP 若你使用的是公有云产品 例如 腾讯云 阿里云 华为云 AWS AZ 类似的产品即可不关注这部分
主机名 | IP |
---|---|
k8s-master-node1 | 10.0.4.13 |
k8s-worker-node1 | 10.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替换空格
第五步:设置镜像站
/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.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 为目标架构
第六步:安装程序包
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
初始化完成大概这个样子
设置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
1 条评论
陈副唛:文章真不错https://www.wpfsdl.com/b/96564.html