K8S集群安装

1,233 阅读2分钟

本文描述4节点k8s 集群搭建过程。

服务器搭建可跳过本节

multipass 安装虚拟机

Multipass是一种简单的虚拟机工具。它不仅使启用虚拟机变得快速简易,还使管理那些虚拟机变得异常简单,因此可以立即开始针对云、边缘、物联网或任何一种类型的技术进行开发。

详细使用可参考官方文档

  1. macOS 安装 multipass
brew install multipass --cask

其他操作系统参考 官方安装方式

  1. 启动虚拟机
multipass launch -n ubuntu-1 -c 2 -d 5G -m 3G -vvv release:lts
  • -c 指定2核cpu

  • -d 指定5G硬盘

  • -m 指定3G内存 特别注意: k8s 启动检查最低需要2G内存

同样方法启动其他三个虚拟机,最终得到ubuntu-1ubuntu-2ubuntu-3ubuntu-4四个虚拟机

image.png

下面可以通过 multipass shell ubuntu-x进入虚拟机

image.png


  1. 更改软件源

修改 /etc/apt/sources.list

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
sudo apt update

安装docker

以下内容参考 docker 文档

  1. 删除旧版本,若未安装过可以跳过
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. 设置docker仓库源 首次使用docker 建议使用,方便后续更新等。
  • 更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    software-properties-common
  • 添加清华源Docker的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 添加清华源仓库源
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • 安装 Docker 引擎
 sudo apt-get update
 sudo apt-get install docker-ce docker-ce-cli containerd.io

修改docker

使用 systemd 来管理容器的 cgroup

sudo mkdir /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://u56erzji.mirror.aliyuncs.com"
  ]
}
EOF

建议同时修改镜像仓库,以加速镜像拉取

重新启动 Docker 并在启动时启用

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

安装K8S

  1. 允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
  1. 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

  1. 导入 gpg key
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

  1. 添加 Kubernetes apt 仓库
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

建议使用清华源代替

deb https://mirrors.tuna.tsinghua.edu.cn/kubernetes/apt kubernetes-xenial main
  1. 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。

使用Kubeadm 创建集群

首先了解 Kubeadm 操作

  • kubeadm init 用于搭建控制平面节点
  • kubeadm join 用于搭建工作节点并将其加入到集群中
  • kubeadm upgrade 用于升级 Kubernetes 集群到新版本
  • kubeadm config 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 - kubeadm upgrade 来配置你的集群
  • kubeadm token 用于管理 kubeadm join 使用的令牌
  • kubeadm reset 用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更
  • kubeadm certs 用于管理 Kubernetes 证书
  • kubeadm kubeconfig 用于管理 kubeconfig 文件
  • kubeadm version 用于打印 kubeadm 的版本信息
  • kubeadm alpha 用于预览一组可用于收集社区反馈的特性

在执行前, 我们可以使用 kubeadm config images pull 预先拉取需要的镜像。避免后续操作耗时。

  1. 对机器先执行 kubeadm init phase --preflight 用于前置检查,没有问题我们可以使用kubeadm init --dry-run 来先了解下需要执行哪些操作。

image.png

  1. 在ububtu-1节点执行kubeadm init --pod-network-cidr 10.244.0.0/16

当出现如下提示的时候就可以进行下一步操作 image.png

如果是非root用执行kubelet我们需要执行

mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 在另外三个节点执行join
kubeadm join 172.16.46.8:6443 --token qe23c9.qiwewj73vtu9qlej \
	--discovery-token-ca-cert-hash sha256:e69bf29e914c6f8d6e6f1b423a932160493eceddceec789be860010aa4c6b685

稍作休息,执行kubectl get nodes

image.png

这个时候我们看到,节点都是NotReady 状态。 因为必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。 在安装网络之前,集群 DNS (CoreDNS) 将不会启动。

image.png

  1. 安装flannel插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

安装 Pod 网络后,您可以通过在 kubectl get pods --all-namespaces 输出中检查 CoreDNS Pod 是否 Running 来确认其是否正常运行。

image.png

再次执行 kubectl get nodes

image.png

到此我们一主三从的集群环境就搭建好了