k8s 面向應用開發者的基礎命令

隨着容器技術的發展,k8s 也愈來愈火熱。在網絡上有許多關於 k8s 的文章,但大部分都是關於集羣部署相關的,node

而這篇文章主要講做爲應用開發者如何使用 k8s 。git

準備

預備知識

  • Docker,學習 k8s 以前瞭解 Docker 是毋庸置疑的。

工具

brew install kubectl

kubectl 是 k8s 的命令行工具,用於管理 k8s 集羣。以上是 Mac 下的安裝方法,其它操做系統參考官方文檔。固然,你也可使用 Dashboard 管理容器。github

Cluster

k8s 集羣,通常生產環境有一個 Cluster 集羣,測試環境有一個 Cluster 集羣。web

Namespace

在一個 Cluster 會有不一樣的 Namespace,能夠區分不一樣的業務團隊。docker

Pod

Pod 是 k8s 中最小的可部署單元。通常一個 Pod 運行一個 Container,可是有時也會運行多個 Container。相似 docker-compose。shell

Deployment

Deployment 用來控制 Pod,好比控制一個應用起幾個 Pod。api

配置文件

關於 k8s 的配置文件位置在 ~/.kube/config。另外也可使用命令 kubectl config 查看以及更改配置,使用命令更改配置的同時,配置文件也會改變。bash

配置文件能夠指定 ClusterNamespaceUser 的配置,並設置 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 命令,根據配置文件更新資源。

配置文件中能夠寫多份配置,也能夠寫 DeploymentService 各類 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
相關文章
相關標籤/搜索