最近开始折腾kubeedge了,折腾之前需要有个本地的k8s环境, 好久没有搭环境了,之前一直用的minikube一键启动, 这次准备从kubeadm重新搭建一下.文末有彩蛋.

1. 准备

操作系统: ubuntu18.04

主机: 1台master节点(192.168.8.215) 1台node节点(192.168.8.102). 可以使用虚拟机安装

K8S版本: 1.21.5 (1.22版本不支持KubeEdge)

2. 开始

2.1 安装 Docker (所有节点)

修改 docker cgroup driver为 systemd

sudo vim /etc/docker/daemon.json

{
   "exec-opts": ["native.cgroupdriver=systemd"] 
}

安装完后重启服务器

2.2 设置网络 (所有节点)

sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X

2.3 关闭Swap分区 (所有节点)

// 临时关闭
swapoff -a
// 永久关闭
vim /etc/fstab

2.4 安装kubeadm kubectl kubelet (所有节点)

sudo apt-get install -y apt-transport-https curl openssh-server

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

sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

sudo ape-get update

sudo apt-get install kubectl=1.21.5-00 kubelet=1.21.5-00 kubeadm=1.21.5-00

2.5 启动master节点

sudo kubeadm init \
 --apiserver-advertise-address=192.168.8.215 \
 --kubernetes-version=v1.21.5 \
 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16

其中 192.168.8.215为主机节点IP

拷贝配置文件

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 pods –all-namespaces 发现coredns为正常启动

因此我们需要安装Pod的网络插件, 此处选择calico.

下载 YAML

curl https://docs.projectcalico.org/manifests/calico.yaml -O

默认会遇到 BIRD is not ready的问题, calico pod无法启动. 参考 Issue. 需要修改 calico.yaml, 添加环境变量, 这里的eno1 为宿主机网卡, 有的机器为eth0, 通过ifconfig可查.

 - name: IP_AUTODETECTION_METHOD 
   value: "interface=eno1" 

安装calico网络插件, 执行 kubectl get pods –all-namespaces 发现coredns和calico正常启动

kubectl apply -f calico.yaml 

2.6 node节点加入集群

kubeadm init成功后, 会返回一条加入节点的指令, 在node节点执行即可.

kubeadm join 192.168.8.215:6443 --token 7ocemt.q3ztjjno27lrf3t0 \
     --discovery-token-ca-cert-hash sha256:da62ac04aed0e83b3fbf87633e6e0e36ecbc54d8a400766e5decf7fee8bb86fd
执行 kubectl get nodes查看节点情况

2.7 Dashboard安装使用

创建Dashboard访问Token

kubectl create serviceaccount dashboard -n default

kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin  --serviceaccount=default:dashboard

kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

2.8 彻底删除

如果想重置master节点环境 重新安装 需要执行 sudo kubeadm reset. 然后删除以下文件

sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
 sudo rm -rf /var/lib/kubelet \
 $HOME/.kube \
 /etc/kubernetes \
 /etc/kubeedge \
 /var/lib/etcd \
 /var/lib/cni \
 /etc/cni/net.d/*

3. 彩蛋

kubeadm搭建中间还是踩了不少坑的,后来请教了下运维大佬,大佬推荐了一个很nice的项目.

img_v2_5ac3096d-d1ad-41cf-bf1e-d8675000833g
一键安装集群脚本

当然,从头开始踩一遍坑对相关的概念的学习和理解会比较有帮助.

4. 相关文档