# 透過 kubeadm 安裝 k8s ###### tags: `install` 在 oci 上建立三個 instance 組成一個 k8s cluster k8s version: 1.26 master node * 1 - Canonical-Ubuntu-20.04-2023.02.15-0 - 1 core - 16 G worker node * 2 - Canonical-Ubuntu-20.04-2023.02.15-0 - 1 core - 16 G subnet 中要注意 1. 22 port 2. 6443 port ## 關閉萬惡根源 ```bash sudo iptables -F ``` ## 關閉 swap ```bash swapoff -a ``` ## 將其他 node 加進 /etc/hosts ```bash sudo vim /etc/hosts ``` ## 安裝 docker 當然也可以安裝其他 CRI 拉,但我懶 ```bash sudo apt-get update sudo apt-get install -y docker.io ``` ## 建立 k8s 環境 ```bash sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo touch /etc/apt/sources.list.d/kubernetes.list vim /etc/apt/sources.list.d/kubernetes.list # 加入 deb http://apt.kubernetes.io/ kubernetes-xenial main sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl ``` ## 修改 config 設定(optional) ```bash sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf # 加入 Environment="cgroup-driver=systemd/cgroup-driver=cgroupfs" ``` [官網文件](https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/) ![](https://i.imgur.com/FLKp8qm.png) ## 建立 master node 使用 calico 配置 ```bash sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=<master-node-ip> ``` ## 建立 worker node ``` sudo kubeadm join <app-server> --token <token> --discovery-token-ca-cert-hash <hash> ``` ## 建立 kubeconfig ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` ## 設定 CNI calico ```bash curl https://docs.projectcalico.org/v3.19/manifests/calico.yaml -O # optional sed -i -e "s?192.168.0.0/16?$POD_CIDR?g" calico.yaml kubectl apply -f calico.yaml ``` 結果 ```bash ubuntu@instance-20230321-danny-master:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION instance-20230321-danny-master Ready control-plane 162m v1.26.3 instance-20230321-danny-worker01 Ready <none> 157m v1.26.3 instance-20230321-danny-worker02 Ready <none> 47m v1.26.3 # 設定 node label kubectl label node instance-20230321-danny-worker02 node-role.kubernetes.io/worker=worker ``` ```bash ubuntu@instance-20230321-danny-master:~$ kubectl get po -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-8674f7b57b-xgzbk 1/1 Running 0 135m kube-system calico-node-25rrf 0/1 Running 0 136m kube-system calico-node-lx5d4 0/1 Running 0 47m kube-system calico-node-rw845 0/1 Running 0 136m kube-system coredns-787d4945fb-jcblz 1/1 Running 0 161m kube-system coredns-787d4945fb-w9swq 1/1 Running 0 161m kube-system etcd-instance-20230321-danny-master 1/1 Running 2 161m kube-system kube-apiserver-instance-20230321-danny-master 1/1 Running 2 161m kube-system kube-controller-manager-instance-20230321-danny-master 1/1 Running 0 161m kube-system kube-proxy-4pwh2 1/1 Running 0 161m kube-system kube-proxy-q8dsf 1/1 Running 0 156m kube-system kube-proxy-vjkc8 1/1 Running 0 47m kube-system kube-scheduler-instance-20230321-danny-master 1/1 Running 2 161m ```