随着容器技術的發展,k8s 也越來越火熱。在網絡 上有許多關于 k8s 的文章,但大部分都是關于叢集部署相關的,
而這篇文章主要講作為應用開發者如何使用 k8s 。
準備
預備知識
- Docker,學習 k8s 之前了解 Docker 是毋庸置疑的。
工具
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
檢視以及更改配置,使用指令更改配置的同時,配置檔案也會改變。
配置檔案可以指定
Cluster
,
Namespace
User
的配置,并設定
Context
。以下是一個簡版的配置檔案。
# 該配置檔案配置了一個使用者 shanyue,一個叢集 dev,并且設定了 dev 的 context apiVersion: v1 clusters: - cluster: certificate-authority: /Users/shanyue/.minikube/ca.crt server: https://192.168.99.100:8443 name: dev contexts: - context: cluster: dev namespace: Business user: shanyue name: dev current-context: dev kind: Config preferences: {} users: - name: shanyue user: client-certificate: /Users/shanyue/.minikube/client.crt client-key: /Users/shanyue/.minikube/client.key 複制代碼
其中
current-context
代表目前上下文,也可以通過以下指令來設定上下文。
# 檢視配置
kubectl config view
# 檢視叢集清單
kubectl config get-clusters
# 檢視 Context 清單
kubectl config get-contexts
# 設定目前 Context
kubectl config use-context dev
複制代碼
建立資源
kubectl create
代表根據檔案建立資源,可以是 Deployment,也可以是 Pod。
kubectl run
代表根據鏡像建立資源。
kubectl create -f app.yaml
kubectl run --image=k8s.gcr.io/echoserver:1.10 --port=8080
複制代碼
一般在 CI 中作 deploy 時會使用
kubectl apply
指令,根據配置檔案更新資源。
配置檔案中可以寫多份配置,也可以寫
Deployment
Service
各種 Kind 配置。以下是以 node 作為伺服器語言樣例的配置。
apiVersion: v1 kind: Service metadata: name: app namespace: dev labels: name: app spec: ports: - port: 8080 targetPort: 8080 protocol: TCP selector: name: app --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: app namespace: dev labels: name: app spec: template: metadata: labels: name: app spec: containers: - name: app image: node imagePullPolicy: Always env: - name: PORT value: "8080" ports: - containerPort: 8080 複制代碼
通路資源
以下 $app 代表特定 Pod 的 Name
# 擷取目前 Context 下所有的 Deployment
kubectl get deployments
# 擷取目前 Context 下所有的 Pod
kubectl get pods
# 擷取目前 Cluster 下所有的 Pod
kubectl get pods --all-namespaces
# 擷取特定 Pod 的狀态
kubectl describe pod $app
# 進入某個 Pod 容器裡邊的指令行
kubectl exec -it $app bash
# 檢視某個 Pod 的日志
kubectl logs $app
本文轉自掘金-
面向業務開發者的 k8s 基本指令