今天我們介紹Kubernetes的安裝步驟,在後續的實驗中我們使用Kubernetes 1.15.3版本。
sudo apt-get -y install git git-review python-pip python-dev
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce -y
docker --version
只有Cloud端需要安裝Kubernetes
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 vim /etc/apt/sources.list.d/kubernetes.list
加入以下這一行:
deb https://apt.kubernetes.io/ kubernetes-xenial main
sudo apt update
# 指定版本
export K_VER="1.15.3-00"
# 安裝Kubernetes
sudo apt-get install -y kubelet=${K_VER}
sudo apt-get install -y kubectl=${K_VER}
sudo apt-get install -y kubeadm=${K_VER}
# 安裝之前記得先關閉swap
sudo swapoff -a
# 叢集初始化
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
最後記得執行後面三行指令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
將kubernetes設定檔放到指定位置,方便系統從該位置讀取設定。
之後我們可以用簡單的指令取得目前叢集內的節點狀態
kubectl get nodes
記得之後cloud有重啟的話也要關閉swap
# 預設關閉swap
sudo vim /etc/fstab
把swapfile那行mark起來:
在上圖中我們可以發現節點狀態為NotReady,是因為容器網路部分還沒設定好。
在Kubernetes叢集中叢集內部的容器是可以透過Cluster-ip做直接溝通的,相當於所有容器同在一個內往裡面。flannel便是一個提供跨節點容器覆蓋網路的解決方案。想了解更多可以參考這裡flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
一段時間後再看一次節點狀態:
最後放上一些kubernetes常見的操作指令,如果是第一次接觸的人可以參考了解基本指令
kubectl get <resource>
# 範例
kubectl get pods
kubectl get deployments
kubectl get secrets
# flag
## -n: 指定特定的namespace
## 為了管理不同類型的服務,有時候宣告資源時會使用不同的namespace,像上述範例直接使用kubectl get pods時預設只會取得default這個namespace底下的物件
kubectl get pods -n kube-system
## -A: 顯示所有namespace下的物件
kubectl get pods -A
## -o wide: 顯示更完整的資源訊息
kubectl get pods -o wide
# 透過YAML資源清單定義要宣告的物件,裡面可以敘述物件的資源分配、網路、儲存空間、docker images等等設定
kubectl apply -f <.yaml>
kubectl describe <物件類型> <物件名稱>
# 舉例
## 這裡-n是因為kube-apiserver屬於系統核心服務,預設被放在kube-system這個namespace底下
kubectl describe pods -n kube-system kube-apiserver-alan-virtualbox
# 注意: logs只適用在pods上
kubectl logs <pods-name>
剩下的操作部分會在後面天數做介紹。