k8s (一) 學習環境 Kubernetes 集羣搭建

一、安裝 Docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
鏡像加速(本文使用阿里雲鏡像):

## vi /etc/docker/daemon.json
{"registry-mirrors":["https://<你的ID>.mirror.aliyuncs.com"]}
## systemctl daemon-reload
## systemctl restart docker

備註:本文使用的鏡像爲 luksa/kubia,是《Kubernetes in Action》中使用的鏡像,其爲一個簡單的 Node.js 應用:

const http = require('http');
const os = require('os');
console.log("Kubia server starting...");
var handler = function(request, response) {
console.log("Received request form " + request.connection.remoteAddress);
response.writeHead(200);
response.end("You've hit " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);

Dockerfile 文件的內容爲:

FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]

二、配置 k8s 集羣

Minikube 是一個構建單節點集羣的工具,是運行 Kubemetes 集羣最簡單、最快捷的途徑

2.1. 安裝 kubectl

官方給出地址是:https://storage.googleapis.com ,需要梯子才能使用,改爲使用阿里雲的下載地址:
curl -Lo kubectl http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.20.0/bin/linux/amd64/kubectl && chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl
驗證是否成功:
kubectl version --client

2.2. 安裝 minikube

同樣使用阿里雲的下載地址:
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.16.0/minikube-linux-amd64 && chmod +x ./minikube && mv ./minikube /usr/local/bin/minikube
啓動集羣:
minikube start --driver=none
查看集羣(前提是已經安裝了 kubectl):
kubectl get pod -A # pod 可以縮寫爲 po
遇到的報錯:

  1. Sorry, Kubernetes 1.20.0 requires conntrack to be installed in root’s path
    ## 安裝 conntrack:
    yum install conntrack
    
  2. /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
    echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables #/pro的配置文件根據實際環境來

    三、部署應用

    3.1. 部署應用

    kubectl create deployment hello-minikube --image=luksa/kubia

    3.1.1. pod

    一個 pod 是一組緊密相關的容器,它們總是一起運行在同一個工作節上,以及同一個 Linux 命名空間中。每個 pod 就像一個獨立的邏輯機器,擁有自己的 IP、主機名、進程等,運行一個獨立的應用程序。應用程序可以是單個進程,運行在單個容器中,也可以是一個主應用進程或者其他支持進程,每個進程都在自己的容器中運行一個 pod 的所有容器都運行在同一個邏輯機器上,而其他 pod 中的容器,即使運行在同個工作節點上,也會出現在不同的節點上。

    可以通過下面命令查看 pod 列表:
    kubectl get pods
    kubectl get pods -o wide # 顯示 pod 運行的 IP 和所運行的節點
    

    3.2. 創建服務對象

    每個 pod 都有自己的 IP 地址,但是這個地址是集羣內部的,不能從集羣外部訪問。要讓 pod 能夠從外部訪問,需要通過服務對象公開它,要創建一個特殊的 LoadBalancer 類型的服務。因爲如果你創建一個常規服務(一個 ClusterIP 服務),比如 pod,它只能從集羣內部訪問。通過創建 LoadBalancer 類型的服務,將創建一個外部的負載均衡,可以通過負載均衡的公共 IP 訪問 pod
    kubectl expose deployment hello-minikube --type=NodePort --port=8080
    可以通過下面命令查看服務列表:
    kubectl get services
    如果執行上面的命令可以看到服務是沒有外部 IP 的,可以使用下面命令爲其分配端口:
    minikube service hello-minikube
    # 本文分配的端口爲:31526
    
    也可以使用下面命令指定端口:
    kubectl port-forward service/hello-minikube 7080:8080
    # 可以通過 http://localhost:7080 訪問
    

    3.3. 水平伸縮應用

可以通過下面命令查看 Deployment 列表:
kubectl get deployments
默認只有 1 個 pod 副本,可以增加 pod 副本的數量:
kubectl scale deployment hello-minikube --replicas 3
再次執行查看 Deployment 列表命令,可以看到目標數量變成了 3(需要等待一段時間 3 個 pod 才能都啓動),等 3 個 pod 都成功啓動後,多次調用接口,可以看到有不同的輸出:

curl http://192.168.12.130:31526 # 31526 爲本文分配的端口
## You've hit hello-minikube-6895494d6d-wsfmx
## You've hit hello-minikube-6895494d6d-cbsnz
## You've hit hello-minikube-6895494d6d-rvgvw

參考:

  1. 《Kubernetes in Action》
  2. Install and Set Up kubectl
  3. minikube start
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章