赞
踩
我们准备搭建kubeadm的master+worker集群,实现k8s集群,master、worker在虚拟机上来执行,中间遇到了超级多的坑,都搞定了之后,在这里系统的总结一下,这也是一篇学习笔记。
这篇比较难搞,如果想了解入门级别的话,可以看之前的第一篇,用minikube实现的k8s。
安装kubeadm前的准备可以说是至关重要的一个环节,如果这个出错,就会造成后面的各种报错,每台机器里都要提前安装好docker。
master IP: 192.168.88.134
worker IP: 192.168.88.139
console IP: 192.168.88.136
1.改变hostnmae,把名字改成master
sudo vim /etc/hostname
2.Docker 的配置做一点修改,在“/etc/docker/daemon.json”里把 cgroup 的驱动程序改成 systemd ,然后重启 Docker 的守护进程。
3.为了让 Kubernetes 能够检查、转发网络流量,你需要修改 iptables 的配置,启用“br_netfilter”模块。
4.你需要修改“/etc/fstab”,关闭 Linux 的 swap 分区。
操作的脚本我统一写在下面:
#!/bin/bash # stark @ 2022-12 # https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ # https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#docker # sudo vi /etc/hostname # fix docker issue 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" } EOF sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker # 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 net.ipv4.ip_forward=1 # better than modify /etc/sysctl.conf EOF sudo sysctl --system # Disable Swap sudo swapoff -a sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab # check echo "please check these files:" echo "/etc/docker/daemon.json" echo "/etc/modules-load.d/k8s.conf" echo "/etc/sysctl.d/k8s.conf" echo "cat cat /etc/fstab"
执行这个shell脚本 ,sudo sh 文件名.sh
执行下面的脚本,去.bashrc里面添加一下提示的命令:
sudo apt install -y apt-transport-https ca-certificates curl nfs-common #sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - #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 cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF sudo apt update sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00 sudo apt-mark hold kubeadm kubelet kubectl # check kubeadm version kubectl version --client
source <(kubectl completion bash) ,执行 source .bashrc 生效。
ubuntu22.04 默认是关闭selinux的,( 我没有使用这个命令) 下面是关闭的命令:
vim /etc/selinux/config
SELINUX=disabled
pod-network-cidr 可以给定默认的10.244.0.0,这样安装flannel网络插件的时候就会方便了。 image-repository registry.aliyuncs.com/google_containers 这句是自动安装kubernetes需要的指定的docker镜像。
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.88.134 \
--kubernetes-version=v1.23.3
kubeadm version
kubectl version --client
或者你可以先执行一下下载镜像的脚本:
#!/bin/bash # stark @ 2022-04 # kubeadm config images list --kubernetes-version v1.23.3 # k8s.gcr.io/kube-apiserver:v1.23.3 # k8s.gcr.io/kube-controller-manager:v1.23.3 # k8s.gcr.io/kube-scheduler:v1.23.3 # k8s.gcr.io/kube-proxy:v1.23.3 # k8s.gcr.io/pause:3.6 # k8s.gcr.io/etcd:3.5.1-0 # k8s.gcr.io/coredns/coredns:v1.8.6 # use ali registry to speed up repo=registry.aliyuncs.com/google_containers for name in `kubeadm config images list --kubernetes-version v1.23.3`; do # remove prefix src_name=${name#k8s.gcr.io/} src_name=${src_name#coredns/} docker pull $repo/$src_name # rename to fit k8s docker tag $repo/$src_name $name docker rmi $repo/$src_name done # flannel images for name in `grep image flannel.yml |grep -v '#image' | sed 's/image://g' -`; do docker pull $name done # check docker images
如果初始化失败,可以使用 sudo kubeadm reset -f 进行重置:

安装完成以后这个才是最最最重要的地方!!!!
我解释一下提示的意思,这个地方在加入worker节点的时候也是重点需要理解的地方,非root用户执行下面的命令。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
root用户添加全局变量:
export KUBECONFIG=/etc/kubernetes/admin.conf
有的时候就会遇见 The connection to the server localhost:8080 was refused - did you specify the right host or port? 这个傻逼问题,这个可能是初始化准备的时候有问题,就得重试!用 sudo kubeadm reset 进行重试,如果你没有遇到,恭喜你那你是幸福的!
这个问题我回头会专门回答这个问题,已经知道原因了,我们先安装。
sudo rm $HOME/.kube
sudo rm -rf /etc/cni/net.d
sudo ipvsadm --clear
git 网址 https://github.com/flannel-io/flannel/,底下有提示:
# For Kubernetes v1.17+
# If you use custom podCIDR (not 10.244.0.0/16) you first need to download the above manifest and modify the network to match your one.
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
到此,master节点已经安装好了
stark@master:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 35m v1.23.3
Worker 节点的准备工作和Master的一样,可以把Worker上准备好的sh脚本,在worker的服务器上在执行一遍:
把在master上kubeadm初始化成功的 kubeadm join 找到,在worker上执行,这个意思是加入到master的k8s集群中,如果找不到了,就执行kubeadm token create --print-join-command
kubeadm join 192.168.88.134:6443 --token k0yau8.mimrb35spiho0whw \
--discovery-token-ca-cert-hash sha256:a26bf3d3da3cd4b09fc35cc29bf2170ea8fe43f99f7c2c18ad4634f011bb2c61
scp -r stark@192.168.88.134:~/sh ~
复制k8s文件,执行之前的命令:
sudo scp -r stark@192.168.88.134:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行kubectl get nodes 命令,worker节点安装完毕:
worker@worker:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 67m v1.23.3
worker Ready <none> 4m41s v1.23.3
添加一个pod,测试,已经ok了。
kubectl run ngx --image=nginx:alpine
kubectl get pod -o wide
worker@worker:~$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ngx 1/1 Running 0 49s 10.244.1.2 worker <none> <none>
Console就非常简单了,把文件直接从Master主机上scp过来就好了。
做一个补充,先下载kubectl的文件:
# 下载:
curl -LO https://dl.k8s.io/release/v1.23.3/bin/linux/arm64/kubectl
# 安装
sudo install kubectl /usr/local/bin/kubectl
# 从master节点复制文件
sudo scp stark@192.168.88.134:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf
执行一下刚才执行的:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
至此,kubeadm的,master + worker + console 的环境搭建完成了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。