「Kubernetes」- 部署测试集群(kubeadm、单节点、集群、测试)

该笔记将记录:在 Ubuntu 20.04.4 LTS 中,如何搭建 Kubernetes 1.20.15 集群(供测试使用),以及相关问题处理;

环境配置(每个节点上都要执行)

安装 Docker 环境:Installing Docker on Ubuntu

修改 Docker 配置:

cat > /etc/docker/daemon.json <<EOF
{
  "live-restore": true,
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

systemctl start docker
systemctl enable docker
systemctl reload docker
systemctl restart docker

安装程序:

# 首先,安装依赖工具
apt-get update \
    && apt-get install -y apt-transport-https ca-certificates curl

# 然后,导入仓库密钥
# 尽管下载 apt-key.gpg 存在困难,但是应该尽量从官方站点下载(请勿随意使用第三方密钥)
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  FEEA9169307EA071 8B57C5C2836F4BEB B53DC80D13EDEF05

cat > /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

apt-get update

# 最后,安装工具
apt-get install -y kubelet=1.22.17-00 kubeadm=1.22.17-00 kubectl=1.22.17-00
apt-mark hold kubelet kubeadm kubectl # 禁止更新

集群初始化(在主节点上初始化集群)

# 初始化 Master 节点
# 该命令最终会输出一条指令,需要在各个节点上执行,以加入集群;
kubeadm init                             \
    --pod-network-cidr=10.244.0.0/16     \
    --image-repository registry.aliyuncs.com/google_containers

向集群中加入节点(在工作节点上执行)

# kubeadm init 执行成功后,会产生一个 token,用于向集群中加入节点;
# 在 Worker 中,执行:
kubeadm join --token <token>

# 在 Master 中,查看集群信息
kubeadm get nodes

安装网络插件

# 创建满足 Kubernetes 要求的网络,尤其是给每个 Pod 分配一个 IP 地址;

# 网络插件有很多,可以参考:
# https://kubernetes.io/docs/concepts/cluster-administration/addons/#networking-and-network-policy

# 安装 Flannel 网络:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

当网络配置结束后,节点进入 READY 状态

查看集群状态

# kubectl get nodes
NAME                  STATUS   ROLES                  AGE     VERSION
work-testing-168      Ready    <none>                 2m20s   v1.20.15
work-testing-169      Ready    <none>                 2m47s   v1.20.15
master-node-160       Ready    control-plane,master   6m5s    v1.20.15

使用问题处理

允许 Master 节点调度 Pod

coreos – Allow scheduling of pods on Kubernetes master? – Stack Overflow

kubectl taint nodes --all node-role.kubernetes.io/master-

参考文献

阿里云 kubernetes yum 仓库镜像
使用 kubeadm 初始化 k8s 环境使用非官方的 k8s.gro.io 镜像仓库就无法正常初始化 #67865
一、k8s 主机系统环境配置
kubelet 1.11 won’t start because /var/lib/kubelet/config.yaml is missing/empty on brand new install #66108
kubeadm init
How to install Kubernetes with Kubeadm: A quick and dirty guide
How to gracefully remove a node from Kubernetes?
GitHub – flannel-io/flannel: flannel is a network fabric for containers, designed for Kubernetes
Creating a single control-plane cluster with kubeadm
centos7 添加 bridge-nf-call-ip6tables 出现 No such file or directory
Creating a single master cluster with kubeadm