①Kubernetes實現資源限制,對每個Pod設置資源限制
[root@node-1 k8s-yaml] cat nginx-resource.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
②Kubernetes調度約束,將Pod調度到某一固定的後端node節點上
[root@node-1 k8s-yaml]# cat nginx-node-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deploymeng-node
spec:
replicas: 3
template:
metadata:
name: nginx-pod
labels:
app: nginx
spec:
nodeName: 192.168.175.131 ##將3個pod部署在192.168.175.130節點上
containers:
- name: test
image: nginx:1.10
ports:
- containerPort: 80
創建,並查看deploment部署情況,成功部署
查看pod節點分佈
③Kubernetes服務發現,使得Deployment以及單個Pod節點在創建的時候能夠自動發現Service
注意:想要讓Pod,Deplyment在創建的時候自動加入到Service中,必須要先啓動Service,然後再創建Pod,Deployment
創建Service:
[root@node-1 k8s-yaml]# cat nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
ports上下文:
port: 80表示服務對外開啓的接口可以通過80端口進行訪問。這個對外僅限於node節點。
targetPort: 80表示通過port的端口可以去訪問到pod的80端口。
selector上下文:
app: nginx表示標籤,當Pod節點,Deployment的標籤爲Service相同標籤的話,就可以加入到Service中。
啓動deployment,參考②進行創建,label要一致,啓動之後進入pod中查看容器變量,如圖,成功加入到Service中
④Kubernetes健康檢查,在Pod啓動後進行檢測
livenessProbe
如果檢查失敗,將殺死容器,根據Pod的restartPolicy來操作。
readinessProbe
如果檢查失敗,Kubernetes會把Pod從service endpoints中剔除。
Probe支持以下三種檢查方法:
httpGet
發送HTTP請求,返回200-400範圍狀態碼爲成功。
exec
執行Shell命令返回狀態碼是0爲成功。
tcpSocket
發起TCP Socket建立成功。
注意:默認的Pod的重啓規則restartPolicy爲Always
httpGet,訪問固定頁面,若能夠訪問則判斷改Pod爲健康,否則重啓,對Pod節點中的index.html文件進行健康監測。
啓動該yaml文件,注意,Service服務一直開啓着,要不無法訪問該Pod。
[root@node-1 k8s-yaml]# cat nginx-health.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-health
labels:
app: nginx
spec:
containers:
- name: nginx-health
image: nginx:1.10
# volumeMounts:
# - name: nginx-mount
# mountPath: /tmp/k8s-yaml
livenessProbe:
#tcpSocket:
httpGet:
path: /index.html
port: 80
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 3
ports:
- containerPort: 80
#volumes:
#- name: nginx-mount
# hostPath:
# path: /tmp/k8s-yaml
initialDelaySeconds: 10 表示在Pod啓動10秒後進行檢測。
periodSeconds: 5 表示進行健康監測的頻率爲5秒1次。
timeoutSeconds: 3 表示健康監測失敗後的超時時長。
可以試着將index.html刪除,或換一個文件路徑,這樣使用kubectl describe pod nginx-health就會顯示unhealthy
tcpSocket,通過檢測80,或其他端口是否正常來判斷Pod的健康狀態。
[root@node-1 k8s-yaml]# cat nginx-health.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-health
labels:
app: nginx
spec:
containers:
- name: nginx-health
image: nginx:1.10
# volumeMounts:
# - name: nginx-mount
# mountPath: /tmp/k8s-yaml
livenessProbe:
tcpSocket:
#httpGet:
#path: /index.html
port: 80
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 3
ports:
- containerPort: 80
#volumes:
#- name: nginx-mount
# hostPath:
# path: /tmp/k8s-yaml
exec,通過命令行的形式進行健康狀態檢測。
[root@node-1 k8s-yaml]# cat nginx-health-exec.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: nginx:1.10
livenessProbe:
exec:
command:
- cat
- /usr/share/nginx/html/index.html
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 3