一、环境准备

1.1 实验规划

本次安装基于阿里云购买的三台云主机,规划如下:

1 台 master 节点:172.19.189.51
2 台 worker 节点:172.19.189.52 和 172.19.189.53

1.2 环境配置

  • 设置主机名
    分别设置三台主机名为 k8s-master、k8s-node1 和 k8s-node2,目的是为了方便识别。
# 设置 master 主机名
hostnamectl set-hostname k8s-master && bash

# 设置 worker 主机名
hostnamectl set-hostname k8s-node1 && bash
hostnamectl set-hostname k8s-node2 && bash
  • 安装基础软件包
    后续安装会依赖到这些包,因此提前安装
apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg2
  • 设置apt key
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  • 关闭交换分区
swapoff -a

二、安装容器运行时

注:k8s自从v1.24版本后,默认容器运行时改成了containerd

  • 安装 containerd
sudo apt-get install containerd -y
  • 配置containerd
# 创建目录
mkdir -p /etc/containerd

# 生成 containerd 默认配置
containerd config default > /etc/containerd/config.toml

修改默认配置,打开文件 vim /etc/containerd/config.toml

1. 把 SystemdCgroup = false 修改成 SystemdCgroup = true
2. 把 sandbox_image = "k8s.gcr.io/pause:3.8"修改成 sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
  • 配置 containerd 开机启动,并启动 containerd
systemctl enable containerd --now
  • 配置 containerd 运行时
# 配置文件
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

# 重启 containerd
systemctl restart  containerd
  • 配置 containerd 镜像加速器
# 编辑 vim /etc/containerd/config.toml 文件,将 config_path 修改成如下目录:
config_path = "/etc/containerd/certs.d"
  • 添加配置
# 创建目录
mkdir /etc/containerd/certs.d/docker.io/ -p

# vim /etc/containerd/certs.d/docker.io/hosts.toml,添加以下配置
[host."https://ysbwb3ow.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
  capabilities = ["pull"]
  
# 重启 containerd
systemctl restart containerd

三、安装k8s

  • 配置 k8s 源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF
  • 更新 apt 源
apt-get update

注,如果出现以下错误:
请添加图片描述
解决方案

# 执行命令,最后的 key 要用自己错误提示的,如上面截图
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05

然后再执行 apt-get update 就可以正确执行了。

  • 安装指定版本 k8s
apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00

接下来,标记指定软件包为保留(held back),阻止软件自动更新

apt-mark hold kubelet kubeadm kubectl
  • 初始化 k8s 控制面,即 master 节点
kubeadm init --apiserver-advertise-address 172.19.189.51 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification --kubernetes-version 1.28.0

参数说明:

  • –apiserver-advertise-address 为 api-server 地址,需要指定自己的 master 节点 ip 地址
  • –image-repository 为镜像仓库地址,这里指定为阿里云的镜像仓库地址
  • –pod-network-cidr 为 pod 的 ip 地址分配网段
  • –ignore-preflight-errors 为指定忽略的预检查错误
  • –kubernetes-version 为指定 k8s 的版本

安装完成后,出现以下信息:
在这里插入图片描述
按照上面红框提示,执行该命令,目的是配置 kubectl 可以操作集群:

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

执行查看集群节点命令:

kubectl get nodes

在这里插入图片描述
可以成功看到一个控制面节点,因为还未安装网络插件,所以状态是 NotReady

  • 添加工作节点到集群
    在这里插入图片描述
# 在其他两个 worker 节点上执行上面命令
kubeadm join 172.19.189.51:6443 --token l3xfad.s4x7tlo49yz5c7kk \
        --discovery-token-ca-cert-hash sha256:d8f68f8fb10cae6d286863f5641eefde12c1797bbf2fba59fe1e5bb2154c4ab4

注:节点加入集群的命令也可以使用下面命令生成

 kubeadm token create --print-join-command

添加成功后显示如下信息
在这里插入图片描述
再次查看集群节点,可以看到三个节点:
在这里插入图片描述

四、安装网络插件

  • 下载 calico 部署文件
wget -O calico.yaml https://docs.projectcalico.org/manifests/calico.yaml
  • 部署 calico
kubectl apply -f  calico.yaml
  • 查看 calico 组件是否部署成功
kubectl  get po -n kube-system

在这里插入图片描述
需要 calico 相关组件全部为 running 状态

  • 查看集群节点状态是否已经 Ready
kubectl  get nodes

在这里插入图片描述
可以看到,集群节点全部Ready

五、验证集群网络

  • 创建一个 pod,并进入 Pod
kubectl run busybox --image docker.io/library/busybox:1.28  --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh

验证一:ping 百度域名

ping www.baidu.com

验证二:解析集群默认域名

nslookup kubernetes.default.svc.cluster.local

在这里插入图片描述
可以看出,集群网络 OK。

本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对云原生/c/c++linux课程感兴趣的读者,可以点击链接,查看详情,链接: 传送门

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐