背景
當我們需要對k8s進行二次開發時,k8s環境是必須的,那么在ubuntu上部署單機k8s是最方便的,便於開發調試
系統准備
本人用的是Ubuntu18,以下以此為例
部署之前,最好切換至root用戶,方便操作
sfeng@sfeng-virtual-machine:~$ sudo passwd root
Enter new UNIX password: // 輸入root密碼
Retype new UNIX password: // 重復輸入
passwd: password updated successfully
sfeng@sfeng-virtual-machine:~$ su - root
Password: // 輸入root密碼
系統初始化
sudo ufw disable // 關閉防火牆
sudo systemctl disable ufw // 永久關閉防火牆
sudo swapoff -a // 關閉swap
sed -ri 's/.*swap.*/#&/' /etc/fstab // 永久關閉swap
ubuntu系統默認沒有安裝selinux
// 更換國內鏡像源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i 's@http://cn.mirrors.ustc.edu.cn/ubuntu/@https://mirrors.tuna.tsinghua.edu.cn/ubuntu/@g' /etc/apt/sources.list
apt update
添加k8s安裝秘鑰
sudo apt update && sudo apt install -y apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
安裝docker
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
docker run hello-world // 驗證docker是否安裝完成
配置k8s源
sudo touch /etc/apt/sources.list.d/kubernetes.list
這里選擇阿里雲的源
sudo echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >> /etc/apt/sources.list.d/kubernetes.list
安裝kubelet,kubeadm,kubectl
sudo apt-get update
// 這里帶上版本號,防止后續部署報錯版本不一致問題
sudo apt install -y kubelet=1.18.2-00
sudo apt install -y kubeadm=1.18.2-00
sudo apt install -y kubectl=1.18.2-00
// 保持版本取消自動更新,這里也可以省略
sudo apt-mark hold kubelet kubeadm kubectl
kubeadm 初始化
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.2 --pod-network-cidr=10.240.0.0/16
等待出現以下信息,則說明初始化成功
// ...
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
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/>
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 機器IP:6443 --token q1guce.z76o2a2bb65vhd0u \\
--discovery-token-ca-cert-hash sha256:2a57a27853c66d608bc544742b57602a21d47c3d09fe58eef15258946d4341c0
配置非 root 的操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
coredns 問題解決
這時候node 狀態還是NotReady,因為網絡插件還沒有安裝,這里安裝calico
kubectl apply -f <https://docs.projectcalico.org/v3.10/manifests/calico.yaml>
安裝成功后結果如下
root@sfeng-virtual-machine:~# kubectl get node
NAME STATUS ROLES AGE VERSION
sfeng-virtual-machine Ready master 28m v1.18.2
root@sfeng-virtual-machine:~# kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system calico-kube-controllers-57546b46d6-hfgx2 1/1 Running 0 23m 192.168.109.129 sfeng-virtual-machine <none> <none>
kube-system calico-node-kpx4p 1/1 Running 0 23m 192.168.57.23 sfeng-virtual-machine <none> <none>
kube-system coredns-7ff77c879f-gjgjb 1/1 Running 0 28m 192.168.109.130 sfeng-virtual-machine <none> <none>
kube-system coredns-7ff77c879f-qq6pz 1/1 Running 0 28m 192.168.109.131 sfeng-virtual-machine <none> <none>
kube-system etcd-sfeng-virtual-machine 1/1 Running 0 28m 192.168.57.23 sfeng-virtual-machine <none> <none>
kube-system kube-apiserver-sfeng-virtual-machine 1/1 Running 0 28m 192.168.57.23 sfeng-virtual-machine <none> <none>
kube-system kube-controller-manager-sfeng-virtual-machine 1/1 Running 0 28m 192.168.57.23 sfeng-virtual-machine <none> <none>
kube-system kube-proxy-jzfts 1/1 Running 0 28m 192.168.57.23 sfeng-virtual-machine <none> <none>
kube-system kube-scheduler-sfeng-virtual-machine 1/1 Running 0 28m 192.168.57.23 sfeng-virtual-machine <none> <none>
去掉master污點
// 這樣master就能作為計算節點了哈,不然部署單機也沒有意義
kubectl taint nodes --all node-role.kubernetes.io/master-