上一篇里已經成功的將一個golang的demo服務部署到k8s環境里了,部署的時候我們用到了yaml配置文件,今天這裡簡單的介紹下如何使用創建kubernetes里的資源。在kubernetes里,一切對象皆為資源,可以通過命令或配置文件來創建。 命令行創建資源 通過命令行可以創建namespace ...
上一篇里已經成功的將一個golang的demo服務部署到k8s環境里了,部署的時候我們用到了yaml配置文件,今天這裡簡單的介紹下如何使用創建kubernetes里的資源。在kubernetes里,一切對象皆為資源,可以通過命令或配置文件來創建。
命令行創建資源
通過命令行可以創建namespace、deployment、service、ingress、configmap、secret等很多資源類型
這裡通過命令創建一個名為k8s-test的namespace,命令如下:
kubectl create namespace k8s-test
執行後通過:kubectl get namespace命令可以查到剛剛創建的namespace,如下圖:
其他的資源創建方法,可以查看kubernetes中文文檔:http://docs.kubernetes.org.cn/490.html
通過配置文件創建資源
上一篇里我們部署k8s-demo服務的時候就是使用配置文件來創建kubernetes資源的,因為使用配置文件可以定義多種資源類型來同時創建,比手工一條條命令去創建確實是方便很多。這裡同樣通過創建一個k8s-test2的namespace來測試效果,定義yaml配置文件k8s-test2.yaml如下:
apiVersion: v1
kind: Namespace
metadata:
name: k8s-test2
labels:
name: k8s-test2
上面的配置文件里定義了k8s-test2的namespace名稱,同時還指定了一個label。執行命令"kubectl apply -f k8s-test2.yaml"後查詢namespace列表如下圖:
yaml配置文件里還可以定義很多其他的資源對象,根據創建的資源類型而定。
Deployment配置文件說明
這裡將上一篇里k8s-demo.yaml文件的配置文件做個簡單的說明,補充了若幹常用的定義類型:
---
apiVersion: apps/v1 #必須 指定api版本,此值必須在kubectl api-versions里
kind: Deployment #必須 指定資源類型
metadata: #必須 元數據
name: k8s-demo #必須 符合RFC1035規範的名稱
namespace: default #可選 指定命名空間,預設為default
labels: #可選 標簽選擇器,一般用於selector
app: k8s-demo #label定義
spec: #必須 資源詳細
selector: #可選 選擇器
matchLabels:
app: k8s-demo
replicas: 4 #可選 創建pod的副本數量
revisionHistoryLimit: 10 #可選 歷史版本最多保留的版本數量
minReadySeconds: 5 #可選 Pod對象啟動後多長時間認為就緒,單位秒
strategy: # 更新策略
type: RollingUpdate # 滾動更新
rollingUpdate:
maxSurge: 1 #可選 可以超過期望值的最大pod數 預設為25%,maxSurge、maxUnavailable不能同時為0,都可以設置為數字或百分比
maxUnavailable: 1 #可選 在更新時最大不可用的pod數量 預設為25%
template:
metadata:
labels:
app: k8s-demo
spec:
restartPolicy: Always #表示自動重啟
containers:
- image: www.5bug.wang/docker/k8s-demo:1.0 #容器使用的鏡像地址
imagePullPolicy: IfNotPresent #鏡像拉取策略Always、Never、IfNotPresent
command: ["/bin/bash","-c","./k8s-demo"] #啟動命令,需要前臺運行命令
# env: #指定環境變數
# - name: app_env
# value: qa
name: k8s-demo
ports:
- containerPort: 8080 #容器埠
protocol: TCP
resources: #定義資源數據
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 50m
memory: 50Mi
livenessProbe: #健康檢查設置
tcpSocket:
port: 8080 #服務埠
initialDelaySeconds: 10 #第一次檢測在容器啟動後多長時間後開始
timeoutSeconds: 3 #檢測的超時時間
readinessProbe: #探針
httpGet:
path: /ping #健康檢查介面定義
port: 8080 #健康檢查埠
initialDelaySeconds: 10
timeoutSeconds: 2
volumeMounts: #掛載配置
- name: logs #掛載設備的名字,與volumes[*].name 需要對應
mountPath: /data/logs #掛載到容器的/data/logs下
readOnly: false
volumes: #定義一組掛載設備
- name: logs #定義一個掛載設備的名字
hostPath:
path: /data/logs #掛載設備類型為hostPath,路徑為宿主機下的/data/logs
---
apiVersion: v1
kind: Service #定義Service
metadata:
name: k8s-demo-svc
namespace: default
labels:
app: k8s-demo
spec:
ports:
- name: api
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: k8s-demo
---
apiVersion: extensions/v1beta1
kind: Ingress #定義ingress
metadata:
name: k8s-demo-ingress
namespace: default
spec:
rules:
- host: k8s-demo.local #ingress名稱
http:
paths:
- path: /
backend:
serviceName: k8s-demo-svc
servicePort: api