隨著容器技術的發展,k8s 也越來越火熱。在網路上有許多關於 k8s 的文章,但大部分都是關於叢集部署相關的,
而這篇文章主要講作為應用開發人員如何使用 k8s 。
準備
brew install kubectl
kubectl
是 k8s 的命令列工具,用於管理 k8s 叢集。以上是 Mac 下的安裝方法,其它作業系統參考官方文檔。當然,你也可以使用 Dashboard 管理容器。
Cluster
k8s 叢集,一般生產環境有一個 Cluster 叢集,測試環境有一個 Cluster 叢集。
Namespace
在一個 Cluster 會有不同的 Namespace,可以區分不同的業務團隊。
Pod
Pod 是 k8s 中最小的可部署單元。一般一個 Pod 運行一個 Container,但是有時也會運行多個 Container。類似 docker-compose。
Deployment
Deployment 用來控制 Pod,比如控制一個應用起幾個 Pod。
設定檔
關於 k8s 的設定檔位置在 ~/.kube/config
,另外也可以使用 kubectl config view
查看配置。
設定檔可以指定 Cluster
,Namespace
,User
的配置,並設定 Context
。以下是一個簡版的設定檔。
apiVersion: v1clusters:- cluster: certificate-authority: /Users/shanyue/.minikube/ca.crt server: https://192.168.99.100:8443 name: Devcontexts:- context: cluster: k8s-dev namespace: edu-dev user: shanyue name: devcurrent-context: devkind: Configpreferences: {}users:- name: shanyue user: client-certificate: /Users/shanyue/.minikube/client.crt client-key: /Users/shanyue/.minikube/client.key
其中 current-context
代表當前上下文,也可以通過以下命名來設定。
kubectl config use-context dev
建立資源
kubectl create
代表根據檔案建立一個資源,可以是 Deployment,也可以是 Pod。
kubectl run
代表根據鏡像建立資源。
kubectl create -f app.yamlkubectl run --image=k8s.gcr.io/echoserver:1.10 --port=8080
一般在 CI 中作 deploy 時會使用 kubectl apply
命令,代表根據設定檔進行建立或更新。
設定檔中可以寫多份配置,也可以寫 Deployment,Service 的各種配置。以下是以 node 作為伺服器語言範例的配置。
apiVersion: v1kind: Servicemetadata: name: app namespace: dev labels: name: appspec: ports: - port: 8080 targetPort: 8080 protocol: TCP selector: name: app---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: app namespace: dev labels: name: appspec: template: metadata: labels: name: app spec: containers: - name: app image: node imagePullPolicy: Always env: - name: PORT value: "8080" ports: - containerPort: 8080
訪問資源
# 擷取當前 Context 下所有的 Deploymentkubectl get deploymentskubectl get pods# 擷取當前 Cluster 下所有的 Deploymentkubectl get pods --all-namespaces# 擷取特定 Pod 的狀態kubectl describe $pod app# 進入某個 Pod 容器裡邊的命令列kubectl exec -it $app bash# 查看某個 Pod 的日誌kubectl logs app