最近开始折腾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
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的项目.
当然,从头开始踩一遍坑对相关的概念的学习和理解会比较有帮助.