上一篇里已經成功的將一個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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24410.html
標籤:Go
