iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0

今天我們介紹Kubernetes的安裝步驟,在後續的實驗中我們使用Kubernetes 1.15.3版本。

Docker 安裝

安裝基本套件

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

安裝Docker

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

Kubernetes安裝

只有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 -

新增apt-list

sudo vim /etc/apt/sources.list.d/kubernetes.list

加入以下這一行:

deb https://apt.kubernetes.io/ kubernetes-xenial main

安裝Kubernetes

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}

初始化Kubernetes叢集

# 安裝之前記得先關閉swap
sudo swapoff -a

# 叢集初始化
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  • pod-network-cidr: 指定之後pod分配的IP位址範圍
    等待他自動下載完必須的Docker image後,會出現以下畫面就成功了:

最後記得執行後面三行指令

  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常見的操作指令,如果是第一次接觸的人可以參考了解基本指令

  1. 取得物件
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

  1. 宣告物件
# 透過YAML資源清單定義要宣告的物件,裡面可以敘述物件的資源分配、網路、儲存空間、docker images等等設定
kubectl apply -f <.yaml>
  1. 取得某物件的詳細情形
    通常出問題的時候透過describe的方式可以看出一點端倪
kubectl describe <物件類型> <物件名稱>

# 舉例
## 這裡-n是因為kube-apiserver屬於系統核心服務,預設被放在kube-system這個namespace底下
kubectl describe pods -n kube-system kube-apiserver-alan-virtualbox
  1. log
    用在pods物件上,類似docker logs的功能。同樣也是出問題找bug時的一個選擇
# 注意: logs只適用在pods上
kubectl logs <pods-name>

剩下的操作部分會在後面天數做介紹。


上一篇
Day 2: Kubernetes 架構與元件
下一篇
Day 4: KubeEdge 簡介
系列文
從開源kubernetes雲端運算到kubeedge雲邊協同30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言