使用Ubuntu20.04搭建k8s集群(采用kubeadm)

主机名称设置 (Zhǔ jī shè zhì)

hostnamectl set-hostname k8s1
# hostnamectl set-hostname k8s2
# hostnamectl set-hostname k8s3
# hostnamectl set-hostname k8s4

IP地址与主机名的关联

cat << _EOF_ | sudo tee -a /etc/hosts
172.24.20.40  k8s1
172.24.20.41  k8s2
172.24.20.42  k8s3
172.24.20.43  k8s4
_EOF_

运行Docker / Kubernetes所需的配置

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

Cgroup的配置

如果不在树莓派上进行设置的话,就不需要了吗?

安装依赖的相关软件包

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common socat conntrack ipset

代理服务器的设置

如果无法安装apt-get或apt,则可以尝试添加以下设置。

nano /etc/hosts

Acquire::http::No-Cache true;
Acquire::http::Pipeline-Depth 0;

安装containerd

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 

##アーキテクチャの設定は適切に
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update
sudo apt-get -y install containerd.io

重新启动后,仍然需要启用供containerd使用的内核模块。

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

进行内核模块的加载和卸载。

sudo modprobe overlay
sudo modprobe br_netfilter

编辑containerd的配置文件

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

安装Kubernetes软件包

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat << _EOF_ | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
_EOF_

sudo apt-get update
apt-get install -y kubelet=1.23.3-00 kubeadm=1.23.3-00 kubectl=1.23.3-00
apt-mark hold kubelet kubeadm kubectl

切换オフ

sudo swapoff -a

kubeadm的设置

nano /etc/systemd/system/kubelet.service.d/10-allow-swap.conf

[Service]
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"

systemctl daemon-reload

Kubelet的配置

systemctl start kubelet
systemctl enable kubelet

根据情况禁用防火墙。

systemctl stop ufw

Kubernetes集群的初始化(主节点)

仅使用MasterNode执行初始化命令。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=k8s1 --apiserver-cert-extra-sans=k8s1

与kubelet相关的错误

在这里出现了与kubelet相关的错误。

kubeadm的重置

kubeadm reset
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=k8s1 --apiserver-cert-extra-sans=k8s1

出力: 力量的输出

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join k8s1:6443 --token 867qpj.1dwsg5x8e003ihyi \
        --discovery-token-ca-cert-hash sha256:2dc50ac606f40bb12d4eb1ac0af2bfc852a47be83f3ad1b4f8f75c69338dca1c \
        --control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s1:6443 --token 867qpj.1dwsg5x8e003ihyi \
        --discovery-token-ca-cert-hash sha256:2dc50ac606f40bb12d4eb1ac0af2bfc852a47be83f3ad1b4f8f75c69338dca1c

将生成的命令输入到Worker中。
如果想要添加控制平面,请另外输入上面的命令。

将kubectl使用的认证信息文件复制到默认读取的路径中。

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

工人节点嵌入

执行加入集群命令。

kubeadm join k8s1:6443 --token 867qpj.1dwsg5x8e003ihyi \
        --discovery-token-ca-cert-hash sha256:2dc50ac606f40bb12d4eb1ac0af2bfc852a47be83f3ad1b4f8f75c69338dca1c

只需要一个选项,用中文将下面的内容进行释义:

仅需设置Master主机的Flannel配置。

sudo sysctl net.bridge.bridge-nf-call-iptables=1

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

bannerAds