-
其一是統一運維的基礎設施,如果同一個運維團隊裡,同時存在 Kubernetes、Docker Swarm、Shell 指令碼等多種運維工具,維護起來難免顧此失彼,容易產生問題,也不利於技術積累。
-
其二是基於 Kubernetes 可以快速水平擴充套件,特別是一個新想法上線如果短期內獲得了不錯的反應,流量會有快速的增長,基於 Kubernetes 的配置可以在數分鐘內從單機擴充套件到上百臺機器的叢集。
-
其三是可以使用成熟的 Kubernetes 部署策略,即便是單節點,仍然可以透過簡單配置就實現滾動更新(RollingUpdate)、回滾等。同時還可以有 Kubernetes Dashboard 這樣好用的 UI 介面,而其他方案則要自己實現這些,並不划算。
minikube start --vm-driver hyperkit
minikube start --vm-driver hyperv
minikube start --vm-driver=none
apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get update && apt-get install docker-ce=18.06.2~ce~3-0~ubuntu
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
export CHANGE_MINIKUBE_NONE_USER=true
mkdir -p $HOME/.minikube
minikube start --vm-driver=none
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
kubectl completion bash >> ~/.bashrc
source ~/.bashrc
kubectl config set-context minikube --namespace=kube-system
# kubectl get pods
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-86c58d9df4-jjhwl 0/1 CrashLoopBackOff 5 3m59s
kube-system coredns-86c58d9df4-zzj4m 0/1 CrashLoopBackOff 5 3m59s
# kubectl logs coredns-86c58d9df4-jjhwl
[FATAL] plugin/loop: Forwarding loop detected in "." zone. Exiting. See https://coredns.io/plugins/loop#troubleshooting. Probe query: "HINFO 6451342721392587444.9147583119172762210.".
minikube --vm-driver=none start --extra-config=kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
rm /etc/resolv.conf && echo "nameserver 114.114.114.114 > /etc/resolv.conf"
kubectl delete pods -n kube-system --selector k8s-app=kube-dns
rm /etc/resolv.conf && cp /run/systemd/resolve/resolv.conf /etc/resolv.conf
kubectl delete pods -n kube-system --selector k8s-app=kube-dns
-
Minikube 在安裝時將改寫主機原有的 /usr/local/bin/kubeadm,/usr/local/bin/kubectl,/etc/kubernetes 等目錄
-
無法在一臺主機上使用 vm-driver=none 安裝 2 個 minikube
-
minikube dashboard,minikube mount,minikube ssh 等基於虛擬機器的指令均無法使用
-
minikube delete 將刪除 /etc/kubernetes 目錄
snap info microk8s
snap install microk8s --classic
snap alias microk8s.kubectl kubectl
source microk8s.kubectl completion bash)
snap unalias kubectl
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
swapoff -a
kubeadm init --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl run --rm --restart=Never -it --image=hello-world test-pod
$ kubectl describe pod test-pod
0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.
kubectl taint nodes --all node-role.kubernetes.io/master-
-
容器執行時:預設是 Docker
-
etcd:key-value 儲存服務,用於儲存叢集的狀態
-
kube-apiserver:叢集資源操作的唯一入口,並提供認證、授權、訪問控制、API 註冊和發現等機制
-
kube-controller-manager:維護叢集的狀態,比如故障檢測、自動擴充套件、滾動更新等
-
kube-scheduler:負責資源的排程,按照預定的排程策略將 Pod 排程到相應的機器上
-
kubelet:負責維持容器的生命週期,同時也負責 Volume(CVI)和網路(CNI)的管理
-
kube-proxy:負責為 Service 提供 Cluster 內部的服務發現和負載均衡
-
MicroK8s 部署 Kubernetes 是直接安裝到主機而不是以容器方式安裝
-
MicroK8s 雖然預設沒有安裝 DNS 服務,但通常情況下為了使用服務發現,還是需要安裝的,MicroK8s 預設的 DNS 服務是 Kube-Dns,而不是目前官方推薦的 CoreDNS 。
-
網路外掛 Kubeadm 需要自己選擇, MicroK8s 和 Minikube 都會自己安裝
-
Minikube 預設額外安裝了 storage-provisioner 用於虛擬機器掛載磁碟 從易用角度來看,MicroK8s 是安裝最簡單,門檻最低的;Minikube 適合對 Minikube 比較熟悉的使用者。