Object的定義一般以Yaml格式進行描述。linux
Yaml是一種直觀的數據序列化格式,主要經過縮進的方式組織數據。nginx
Yaml例子:shell
# 註釋
house:
family:
name: Doe
parents: # - 開始,表示數組元素 - John - Jane children: - Paul - Mark - Simone address: number: 34 street: Main Street city: Nowheretown zipcode: 12345
定義好object文件後就能夠經過kubectl命令將object發送給k8s服務器執行。windows
Object格式:api
apiVersion: apps/v1 # k8s api版本
kind: Deployment # Object類型
metadata: # Object元數據定義,例如定義名字
name: nginx-deployment spec: # Object 內容定義 ..... status: # Object 運行狀態, 一般不須要咱們定義,k8s負責更新 ....
安裝kubectl命令數組
#LINUX
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl
chmod +x ./kubectl mv ./kubectl /usr/bin/kubectl #Windows, 下載kubectl命令,而後配置下環境變量PATH,將kubectl的路徑加入到PATH https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/windows/amd64/kubectl.exe
配置k8s集羣鏈接憑證bash
kubectl命令鏈接遠程服務器的配置默認存放在$HOME/.kube/config文件中,也能夠經過指定--kubeconfig參數執行配置文件,例子:kubectl --kubeconfig ./k8s.conf get pods服務器
k8s集羣的憑證,以阿里云爲例展現如何獲取:app
複製下圖中的憑證保存到指定的位置便可curl
#應用一個object配置, 至於部署什麼,就看yaml配置文件定義了什麼, 這裏部署一個pod
kubectl apply -f ./pod.yaml #kubectl get子命令用戶展現k8s資源,k8s資源就是咱們經過object部署的東西。 #展現全部pod kubectl get pods #展現kube-system名字空間下的全部pod, 默認kubectl命令只是操做default默認名字空間,能夠經過-n參數指定名字空間 kubectl get pods -n kube-system #展現全部deployment kubectl get deploy #展現全部service(服務) kubectl get svc #展現全部ingress kubectl get ingress #以yaml格式,展現具體的ingress資源的配置, 展現任意資源具體的yaml配置命令格式:kubectl get 資源類型 資源名字 -o yaml kubectl get ingress 資源名字 -o yaml #刪除指定的資源,具體刪除內容由配置文件object定義 kubectl delete -f ./pod.yaml #在容器中執行命令格式 kubectl exec 容器id 命令 #在admin-app-5f84f57f7-vthlf容器中,執行ls /alidata/www 命令 kubectl exec admin-app-5f84f57f7-vthlf ls /alidata/www #在admin-app-5f84f57f7-vthlf容器中,打開shell交互窗口, 須要加上-it參數 kubectl exec -it admin-app-5f84f57f7-vthlf bash
主要用於部署pod,支持滾動升級。
apiVersion: apps/v1
#對象類型
kind: Deployment
metadata:
name: nginx-deployment #deployment名字 labels: app: nginx #deployment標籤,能夠自由定義 spec: replicas: 3 #pod 副本數量 selector: #pod選擇器定義,主要用於定義根據什麼標籤搜索須要管理的pod matchLabels: app: nginx #pod標籤 template: #pod模版定義 metadata: labels: #pod 標籤訂義 app: nginx spec: containers: #容器數組定義 - name: nginx #容器名 image: nginx:1.7.9 #鏡像地址 command: #容器啓動命令,【可選】 - /alidata/www/scripts/start.sh ports: #定義容器須要暴露的端口 - containerPort: 80 env: #環境變量定義【可選】 - name: CONSOLE_URL #變量名 value: https://www.xxx.com #變量值
服務定義,主要用於暴露pods容器中的服務。
apiVersion: v1
#對象類型
kind: Service
metadata:
name: my-service #服務名 spec: selector: #pod選擇器定義,由這裏決定請求轉發給那些pod處理 app: nginx #pod 標籤 ports: #服務端口定義 - protocol: TCP #協議類型,主要就是TCP和UDP port: 80 # 服務端口 targetPort: 80 #pod 容器暴露的端口
http路由規則定義,主要用於將service暴露到外網中
apiVersion: extensions/v1beta1
#對象類型
kind: Ingress
metadata:
name: my-ingress #ingress應用名 spec: rules: #路由規則 - host: www.xxx.com #域名 http: paths: #訪問路徑定義 - path: / #表明全部請求路徑 backend: #將請求轉發至什麼服務,什麼端口 serviceName: my-service #服務名 servicePort: 80 #服務端口
主要用於容器配置管理。
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config #配置項名字 data: key1: value1 key2: value2
定義完配置後,能夠經過如下方式在容器中應用配置:
#經過環境變量注入配置
apiVersion: v1
kind: Pod
metadata:
name: config-pod-1 spec: containers: - name: test-container image: busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY ## 環境變量 valueFrom: ##使用valueFrom來指定env引用配置項的value值 configMapKeyRef: name: my-config ##引用的配置文件名稱 key: key1 ##引用的配置項key restartPolicy: Never
#經過數據卷注入配置
apiVersion: v1
kind: Pod
metadata:
name: config-pod-4 spec: containers: - name: test-container image: busybox command: [ "/bin/sh", "-c", "ls /etc/config/" ] ##列出該目錄下的文件名 volumeMounts: - name: config-volume #配置項名字 mountPath: /etc/config #容器中的掛載目錄 volumes: #數據卷定義 - name: config-volume #數據卷名 configMap: #數據卷類型 name: my-config #配置項名字 restartPolicy: Never