前言
在是用kubernetes中,我們對資源的創建大部分都是通過
|
1
|
kubelet create -f RESOURCE.yaml
|
剛開看的時候不免有一些迷茫,看不懂語法,不知道怎么寫;今天本文就介紹一下kubernetes construct語法。
Construct語法其實就是由kubelet格式化成API的post data,提交給apiserver,因此這里支持yaml,json兩種數據結構的文件。
Pod資源
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
apiVersion: v1 指定api版本,此值必須在kubectl apiversion中
kind: Pod 指定創建資源的角色/類型
metadata: 資源的元數據/屬性
name: test 資源的名字,在同一個namespace中必須唯一
labels: 設定資源的標簽
sex: boy 標簽以key/value的結構存在
age: 18
spec: #specification of the resource content 指定該資源的內容
restartPolicy: Never 表明改容器僅僅運行一次,默認k8s的策略,在此容器退出后,會立即創建一個相同的容器
volumes: 定義一組掛載設備
- name: volume 定義一個掛載設備的名字
hostPath: /data/www/html 掛載設備類型為hostPath,路徑為宿主機下的/data/www/html,這里設備類型支持很多種
containers: 指定資源中的容器
- name: container1 容器的名字
image: “docker.coocla.org/ubuntu:last” 容器使用的鏡像地址
volumeMounts:
- mountPath: /mnt 掛載到容器的某個路徑下
name: volume 掛載設備的名字,與volumes[*].name 需要對應
livenessProbe: 容器健康監測
httpGet: http形式監測,返回200-399之間,則認為容器正常
path: /health
port: 8080
initialDelaySeconds: 15 表明第一次檢測在容器啟動后多長時間后開始
timeoutSeconds: 1 檢測的超時時間
env: 指定容器中的環境變量
- name: str 變量的名字
value: "hello world” 變量的值
command: ["/bin/bash", "-c"] 覆蓋容器中的Entrypoint,對應Dockefile中的ENTRYPOINT
args: ["/bin/echo", "$(str)"] 對應Dockerfile中CMD參數
|
健康監測還支持另外一種方法:
|
1
2
3
4
5
6
|
exec: 執行命令的方法進行監測,如果其退出碼不為0,則認為容器正常
command:
- cat
- /tmp/health
initialDelaySeconds: 15
timeoutSeconds: 1
|
ReplicationController的語法參數
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 2 指定rc中pod的個數
template: 指定rc中pod的模板,rc中的pod都是按照這個模板來創建的
metadata: 指定rc中pod的元數據,注意這里不需要在指定pod的名字,它由rc復制生成
labels:
app: nginx
spec:
container:
- name: nginx
image: nginx
|
Service
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
apiVersion: v1
kind: Service
metadata:
name: nginxsvc
labels:
app: nginx
spec: 指定Service中的內容
ports: 映射列表
- port: 80 service的端口
porotocal: TCP 映射的協議類型,支持TCP/UDP
targetPort: 80 映射到pod的端口
name: www.baidu.com 該映射的名字
selector: 匹配器
port: 80
app: nginx 匹配label中app為nginx,port為80的pod
|
Secret
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: 0paque 定義secret的類型,這里支持三種類型
password: xxx|base64 以key/value的形式定義,value需要經過base64編碼才可以,在secret被掛載到container中后,會以key作為文件名,value的值經過base64解碼作為內容,以文件的形式存在於container中
username: xxx|base64
---
type: kubernetes.io/service-account-token 第二種secret類型,用作創建服務賬號的token,用作進程間通信的認證
---
type: kubernetes.io/dockercfg 第三種secret類型,用作在創建container,對docker registry的認證
data:
.dockercfg: `cat ~/.dockercfg | base64`
|
以上為部分資源參數,當然還有更多的參數可以指定,及更多的資源可以通過定義construct來創建。
