隨着容器技術的發展,k8s 也愈來愈火熱。在網絡上有許多關於 k8s 的文章,但大部分都是關於集羣部署相關的,node
而這篇文章主要講做爲應用開發者如何使用 k8s 。git
brew install kubectl
kubectl
是 k8s 的命令行工具,用於管理 k8s 集羣。以上是 Mac 下的安裝方法,其它操做系統參考官方文檔。固然,你也可使用 Dashboard 管理容器。github
k8s 集羣,通常生產環境有一個 Cluster 集羣,測試環境有一個 Cluster 集羣。web
在一個 Cluster 會有不一樣的 Namespace,能夠區分不一樣的業務團隊。docker
Pod 是 k8s 中最小的可部署單元。通常一個 Pod 運行一個 Container,可是有時也會運行多個 Container。相似 docker-compose。shell
Deployment 用來控制 Pod,好比控制一個應用起幾個 Pod。api
關於 k8s 的配置文件位置在 ~/.kube/config
。另外也可使用命令 kubectl config
查看以及更改配置,使用命令更改配置的同時,配置文件也會改變。bash
配置文件能夠指定 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