ubuntu22.04安装K8s
·
ubuntu22.04安装版本为v1.28.2的k8s 并且使用docker作为cri
前置条件
# 关闭swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 关闭防火墙
sudo ufw disable
# 设置主机名(可选)
sudo hostnamectl set-hostname k8s-master
sudo hostnamectl set-hostname k8s-node1
sudo hostnamectl set-hostname k8s-node2
# 将主机名添加到hosts
cat >> /etc/hosts << EOF
192.168.0.103 k8s-master
192.168.0.104 k8s-node1
192.168.0.105 k8s-node2
EOF
# 加载内核模块
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
安装Docker(使用阿里云镜像)
安装Docker CE,并配置其使用systemd作为cgroup驱动,因为kubelet默认使用systemd
# 使用阿里云镜像安装 Docker
sudo apt-get update
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 配置 Docker
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["https://your-code.mirror.aliyuncs.com"]
}
EOF
sudo systemctl enable docker
sudo systemctl start docker
配置containerd(Docker使用containerd作为运行时)
Kubernetes通过CRI与容器运行时交互,而Docker本身不支持CRI,所以我们需要安装一个CRI插件。这里我们使用cri-dockerd。
从Kubernetes 1.24开始,移除了对Docker的直接支持,因此我们需要使用cri-dockerd来让Kubernetes通过CRI接口与Docker通信。
安装cri-dockerd
# 下载cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd_0.3.4.3-0.ubuntu-jammy_amd64.deb
# 安装cri-dockerd
sudo dpkg -i cri-dockerd_0.3.4.3-0.ubuntu-jammy_amd64.deb
# 下载安装包解压并配置service文件
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz
tar -xzf cri-dockerd-0.3.4.amd64.tgz
sudo mv cri-dockerd/cri-dockerd /usr/local/bin/
sudo tee /etc/systemd/system/cri-dockerd.service > /dev/null <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=docker.service
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
# 启动cri-dockerd
sudo systemctl daemon-reload
sudo systemctl enable cri-dockerd
sudo systemctl start cri-dockerd
安装 Kubernetes 组件
# 添加阿里云 Kubernetes 镜像源
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装 kubelet、kubeadm、kubectl
sudo apt-get update
sudo apt-get install -y kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00
sudo apt-mark hold kubelet kubeadm kubectl
master上执行集群初始化
sudo kubeadm init \
--kubernetes-version=v1.28.2 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.0.103 \
--image-repository=registry.aliyuncs.com/google_containers
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 设置 KUBECONFIG 环境变量
export KUBECONFIG=$HOME/.kube/config
echo "export KUBECONFIG=$HOME/.kube/config" >> ~/.bashrc
source ~/.bashrc
master安装安装网络插件(使用国内镜像)
# 方法1:使用阿里云镜像下载Flannel
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# 修改镜像地址为国内镜像
sed -i 's#docker.io/##g' kube-flannel.yml
sed -i 's#flannelcni/flannel#registry.cn-hangzhou.aliyuncs.com/google_containers/flannel#g' kube-flannel.yml
# 应用Flannel网络插件
kubectl apply -f kube-flannel.yml
从节点加入集群
kubeadm join 192.168.0.103:6443 --token iqd54u.rjbdipodz094os5l \
--discovery-token-ca-cert-hash sha256:3ba2e475863345133f0af2cce2fe0ba3ac4c3a77cc5735ca693d02cafd445015
--cri-socket unix:///var/run/cri-dockerd.sock
查看现有的令牌
# 在 Master 节点上执行
kubeadm token list
如果令牌过期
# 在 Master 节点上创建新令牌
kubeadm token create
# 获取 ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 或者直接生成完整命令
kubeadm token create --print-join-command
最终效果
更多推荐


所有评论(0)