kubernetes實踐之六十三:使用技巧
一:在容器中獲取 Pod 的IP
容器中可以直接使用 POD_IP 環境變數獲取容器的 IP,透過環境變數來實現,該環境變數直接引用 resource 的狀態欄位。
二:在Pod中獲取宿主機的主機名、namespace等
這條技巧補充了第一條獲取 podIP 的內容,方法都是一樣的,只不過列出了更多的引用欄位。參考下面的 pod 定義,每個 pod 裡都有一個 {.spec.nodeName} 欄位,透過 fieldRef 和環境變數,就可以在Pod中獲取宿主機的主機名(訪問環境變數MY_NODE_NAME)。
三:指定容器的啟動引數
我們可以在 Pod 中為容器使用 command 為容器指定啟動引數:
使用陣列的方式定義,所有命令使用跟 Dockerfile 中的 CMD 配置是一樣的,但是有一點不同的是,bootsttap.sh 必須具有可執行許可權,否則容器啟動時會出錯。
四:使容器內時間與宿主機同步
我們下載的很多容器內的時區都是格林尼治時間,與北京時間差8小時,這將導致容器內的日誌和檔案建立時間與實際時區不符,有兩種方式解決這個問題:
1.修改映象中的時區配置檔案
2.將宿主機的時區配置檔案/etc/localtime使用volume方式掛載到容器中
第二種方式比較簡單,不需要重做映象,只要在應用的yaml檔案中增加如下配置:
五:kubectl 命令補全
六:建立一個CentOS測試容器
有時我們可能需要在Kubernetes叢集中建立一個容器來測試叢集的狀態或對其它容器進行操作,這時候我們需要一個操作節點,可以使用一個普通的CentOS容器來實現。即使用一個while迴圈保證容器啟動時擁有一個前臺程式。
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: ReplicationController
-
metadata:
-
name: world-v2
-
spec:
-
replicas: 3
-
selector:
-
app: world-v2
-
template:
-
metadata:
-
labels:
-
app: world-v2
-
spec:
-
containers:
-
- name: service
-
image: test
-
env:
-
- name: POD_IP
-
valueFrom:
-
fieldRef:
-
fieldPath: status.podIP
-
ports:
-
- name: service
- containerPort: 777
二:在Pod中獲取宿主機的主機名、namespace等
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Pod
-
metadata:
-
name: dapi-test-pod
-
spec:
-
containers:
-
- name: test-container
-
image: busybox
-
command: [ "/bin/sh", "-c", "env" ]
-
env:
-
- name: MY_NODE_NAME
-
valueFrom:
-
fieldRef:
-
fieldPath: spec.nodeName
-
- name: MY_POD_NAME
-
valueFrom:
-
fieldRef:
-
fieldPath: metadata.name
-
- name: MY_POD_NAMESPACE
-
valueFrom:
-
fieldRef:
-
fieldPath: metadata.namespace
-
- name: MY_POD_IP
-
valueFrom:
-
fieldRef:
-
fieldPath: status.podIP
-
- name: HOST_IP
-
valueFrom:
-
fieldRef:
-
fieldPath: status.hostIP
-
- name: MY_POD_SERVICE_ACCOUNT
-
valueFrom:
-
fieldRef:
-
fieldPath: spec.serviceAccountName
- restartPolicy: Never
三:指定容器的啟動引數
我們可以在 Pod 中為容器使用 command 為容器指定啟動引數:
點選(此處)摺疊或開啟
- command: ["/bin/bash","-c","bootstrap.sh"]
四:使容器內時間與宿主機同步
我們下載的很多容器內的時區都是格林尼治時間,與北京時間差8小時,這將導致容器內的日誌和檔案建立時間與實際時區不符,有兩種方式解決這個問題:
1.修改映象中的時區配置檔案
2.將宿主機的時區配置檔案/etc/localtime使用volume方式掛載到容器中
第二種方式比較簡單,不需要重做映象,只要在應用的yaml檔案中增加如下配置:
點選(此處)摺疊或開啟
-
volumeMounts:
-
- name: host-time
-
mountPath: /etc/localtime
-
readOnly: true
-
volumes:
-
- name: host-time
-
hostPath:
- path: /etc/localtime
點選(此處)摺疊或開啟
-
# yum install -y bash-completion
-
-
# source /usr/share/bash-completion/bash_completion
-
- # source <(kubectl completion bash)
有時我們可能需要在Kubernetes叢集中建立一個容器來測試叢集的狀態或對其它容器進行操作,這時候我們需要一個操作節點,可以使用一個普通的CentOS容器來實現。即使用一個while迴圈保證容器啟動時擁有一個前臺程式。
點選(此處)摺疊或開啟
-
apiVersion: extensions/v1beta1
-
kind: Deployment
-
metadata:
-
name: test
-
labels:
-
app: test
-
spec:
-
replicas: 1
-
template:
-
metadata:
-
labels:
-
app: test
-
spec:
-
containers:
-
- image: harbor-001.jimmysong.io/library/centos:7.2.1511
-
name: test
-
command: ["/bin/bash","-c","while true; do sleep 1000; done"]
- imagePullPolicy: IfNotPresent
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2156486/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實戰篇之helm使用技巧
- kubernetes實踐之六十二:Secret 使用
- kubernetes實踐之十一:EFK
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之十九:API概述API
- kubernetes實踐之十七:架構架構
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- kubernetes實踐之四十二:StatefulSet
- kubernetes實踐之六十四:CoreDNSDNS
- kubernetes實踐之五十六:雲原生
- kubernetes實踐之五:網路模型模型
- kubernetes實踐之十二:部署Traefik Ingress
- kubernetes實踐之九:kube-dnsDNS
- GitOps實踐之kubernetes安裝argocdGitGo
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- kubernetes實踐之十四:Service Account與Secret
- kubernetes實踐之四十七:ResourceQuota ControllerController
- kubernetes實踐之六十五:Service Mesh
- kubernetes生產實踐之redis-clusterRedis
- kubernetes實踐之七十二:Istio之策略與遙測
- kubernetes實踐之七十三:Istio之配置請求路由路由
- kubernetes實踐之七十:Istio之流量管理(上)
- kubernetes實踐之十六:RBAC 角色訪問控制
- kubernetes實踐之四十九:Scheduler原理分析
- kubernetes實踐之四十四:Ingress詳解
- kubernetes實踐之四十三: Service詳解
- kubernetes實踐之五:Node節點安裝
- kubernetes實踐之五十四:垃圾回收機制
- kubernetes實踐之六十七:Istio介紹
- kubernetes實踐之六:CFSSL構建本地CA
- kubernetes實踐之十五:Kubernetes叢集主要啟動引數說明
- kubernetes實踐之七十一:Istio之流量管理(下)
- kubernetes實踐之六十八:部署 coredns 外掛DNS