十分钟搭建自己Kubernetes集群 Ubuntu 20.04&containerd&calico

小明说:我只想搭建一个集群,网上搜出一大堆原理内容,还分了好几篇看的我眼花缭乱。波波help

波波说:好,没关系。今天咱们一起来搭一个集群。废话不多说开干!

环境要求

每台机器 2 GB 或更多的 RAM 2 CPU 核或更多


准备工作


     内核确认

uname -a

Linux k8s-node2 5.4.0-96-generic #109-Ubuntu SMP Wed Jan 12 16:49:16 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

      设定IP

cd /etc/netplan/

sudo mv 00-installer-config.yaml 00-installer-config.yaml.disabled


vi 99-installer-config.yaml

network:

  version: 2

  ethernets:

    ens33:

      dhcp4: no

      addresses: [192.168.88.100/24]

      gateway4: 192.168.88.2

      nameservers:

          addresses: [192.168.88.2]

          search: []

      optional: true

netplan apply

我准备了三台机器

master:192.168.88.100

node1:192.168.88.101

node2:192.168.88.102

       关闭swap

vi  /etc/fstab 注释掉最后一行

swapoff -a && swapon -a

free -m 查看


kubeadm安装集群

模块配置

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

net.ipv4.ip_forward = 1

EOF

sudo sysctl --system

sudo apt-get install -y apt-transport-https ca-certificates curl

安装containerd

apt-get install containerd

容器运行时

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

sudo sysctl --system

sudo mkdir -p /etc/containerd

containerd config default | sudo tee /etc/containerd/config.toml

sudo systemctl restart containerd


配置crictl 

VERSION="v1.23.0"

wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz

sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin

rm -f crictl-$VERSION-linux-amd64.tar.gz

vi /etc/crictl.yaml

runtime-endpoint: unix:///var/run/containerd/containerd.sock

image-endpoint: unix:///var/run/containerd/containerd.sock

timeout: 2

debug: false

pull-image-on-create: false


安装kubeadm

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:

sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

下载 Google Cloud 公开签名秘钥:

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

添加 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

更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl


注意:以上master与node都要安装


安装 kubeadm

kubeadm init --apiserver-advertise-address=192.168.88.100 \

            --service-cidr=10.1.0.0/16 \

            --pod-network-cidr=192.168.0.0/16


--apiserver-advertise-address 可用于为控制平面节点的 API server 设置广播地址。

--control-plane-endpoint 可用于为所有控制平面节点设置共享端点。

--control-plane-endpoint 允许 IP 地址和可以映射到 IP 地址的 DNS 名称。 (calico默认是192.168.0.0)

安装完后按照说明执行

  mkdir -p $HOME/.kube

  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  sudo chown $(id -u):$(id -g) $HOME/.kube/config

有几个node就你的节点中粘贴执行即可

kubeadm join 192.168.88.100:6443 --token osgyk1.ewoygvudbb84xk3l \

        --discovery-token-ca-cert-hash sha256:4c17899291da6c9888c1f5f02454bcf471a4a3ae214dbe85f2178953456665c1

这个比较关节

export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile

source ~/.bash_profile

顺利完成

常见问题

1,kubeadm安装不成功 查看日志,有可能是API server 设置广播地址写错了

2,kubeadm join的命令不小心丢了怎么办?

      kubeadm token create --print-join-command重新生成一下。

3,搞砸了怎么办?

给你四个我的宝贝,然后重新安装。

kubeadm reset

rm -rf /etc/cni/net.d

rm -rf $HOME/.kube/config

rm -rf /etc/kubernetes/


小明你学会了吗?

总结:其实最好的教程就是官网的帮助文档。K8s安装的东西稍多了一些,我只是梳理了一下。便于小伙伴们理解。

参考:

安装 kubeadm

安装containerd

配置crictl

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容