使用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