k8s免安裝-使用kubectl部署Pod, Deployment, LoadBalancer

此文首發於我的Jekyll博客:zhang0peter的個人博客


如果你想要從零開始搭建自己的k8s集羣參考我的這篇博客,預計花費時間爲1天:從零開始在ubuntu上安裝和使用k8s集羣及報錯解決

自己搭建k8s集羣的難點之一是需要3臺ubuntu虛擬機,要求電腦至少10G內存:操作系統4G內存,3臺虛擬機需要6G內存。

另一個難度是對初學者來說,搭建太複雜了。

如果你不想手動搭建集羣,只想體驗和使用kubernetes集羣,推薦使用digitaloceankubernetes集羣服務,自動搭建,無需安裝。

digitaloceankubernetes集羣提供3臺ubuntu虛擬機(node),每臺1核CPU,2G內存,共30$一個月,體驗一天只要1$。

通過我的鏈接在digitalocean註冊的新用戶,可以獲得100美元的2個月使用權,相當於前2個月免費用:DigitalOcean – sign up

創建kubernetes集羣后,DO會提醒你使用kubectl或者doctl操作集羣,我推薦kubectl這個通用工具。

在本地linux上安裝kubectl,通過 kubectl 操作 k8s 集羣。

echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB #對安裝包進行簽名
sudo gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update
sudo apt install kubectl

安裝完成後下載yaml配置文件到目錄~/.kube,然後運行:

-> # cd ~/.kube && mv k8s-zhang0peter-kubeconfig.yaml config
-> # kubectl get nodes                                          
NAME                  STATUS   ROLES    AGE    VERSION
pool-7wa24lnka-v3sf   Ready    <none>   11m    v1.16.2
pool-7wa24lnka-v3sq   Ready    <none>   11m    v1.16.2
pool-7wa24lnka-v3sy   Ready    <none>   8m8s   v1.16.2

可以看到集羣的狀態是Ready

部署前先創建命名空間,防止污染:

-> # kubectl create namespace flask-test
namespace/flask-test created 
-> # kubectl get namespace
NAME              STATUS   AGE
default           Active   169m
flask             Active   30m
flask-test        Active   65s
kube-node-lease   Active   169m
kube-public       Active   169m
kube-system       Active   169m

部署單個 pod

編輯flask-pod.yaml文件如下:

apiVersion: v1
kind: Pod
metadata:
        name: flask-pod
        labels:
           app: flask-helloworld
spec:
        containers:
        - name:  flask
          image: registry.cn-hangzhou.aliyuncs.com/zhang0peter/flask:v0
          ports:
          - containerPort: 5000

部署應用:

-> # kubectl apply -f flask-pod.yaml -n flask-test
pod/flask-pod created
-> # kubectl get pod -n flask-test
NAME        READY   STATUS    RESTARTS   AGE
flask-pod   1/1     Running   0          12s

轉發端口並訪問:

-> # kubectl port-forward pods/flask-pod 5000:5000 -n flask-test
Forwarding from 127.0.0.1:5000 -> 5000
Handling connection for 5000

-> %  curl http://127.0.0.1:5000
hello world!

刪除 Pod:

-> # kubectl delete pod flask-pod -n flask-test
pod "flask-pod" deleted

部署 Deployment

編寫flask-deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
    name: flask-dep
    labels:
        app: flask-helloworld
spec:
    replicas: 2
    selector:
        matchLabels:
          app: flask-helloworld
    template:
        metadata:
          labels:
            app: flask-helloworld
        spec:
            containers:
            - name:  flask
              image: 'registry.cn-hangzhou.aliyuncs.com/zhang0peter/flask:v0'
              ports:
              - containerPort: 5000

部署 Deployment:

-> # kubectl apply -f flask-deployment.yaml -n flask-test
deployment.apps/flask-dep created
-> # kubectl get deploy -n flask-test
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
flask-dep   2/2     2            2           12s
-> # kubectl get pod -n flask-test
NAME                         READY   STATUS    RESTARTS   AGE
flask-dep-56bcc4b6c5-44gkv   1/1     Running   0          25s
flask-dep-56bcc4b6c5-kkkvl   1/1     Running   0          25s

轉發端口並訪問:

-> # kubectl port-forward deployment/flask-dep 5000:5000 -n flask-test
Forwarding from 127.0.0.1:5000 -> 5000
Handling connection for 5000

-> %  curl http://127.0.0.1:5000
hello world!

不要刪除Deployment,後面還要用。

部署負載均衡應用

編寫flask-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: flask-svc
  labels:
    app: flask-helloworld
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 5000
    protocol: TCP
  selector:
    app: flask-helloworld

部署 LoadBalancer 負載均衡:

-> # kubectl apply -f flask-service.yaml -n flask-test
service/flask-svc created
-> # kubectl get service -n flask-test
NAME        TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
flask-svc   LoadBalancer   10.245.139.6   <pending>     80:32349/TCP   9s

等待約5分鐘,負載均衡實現,對外暴露端口:

-> # kubectl get service -n flask-test   
NAME        TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
flask-svc   LoadBalancer   10.245.139.6   139.59.194.75   80:32349/TCP   4m23s
-> # curl 139.59.194.75
hello world!            

刪除 service

-> # kubectl delete service flask-svc -n flask-test   
service "flask-svc" deleted

部署結束。

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章