Kubernetes--初體驗
通過簡單使用深入Kubernetes
叢集描述
假如現在有一個由三臺機器搭建而成的Kubernetes叢集。三臺機器等同於三個節點。在Kubernetes中有著兩種角色master節點(即我們通常所認為的主節點)和node節點(從節點)
# 在任一一個節點上檢查叢集資訊
kubectl get nodes
# 輸出如下
NAME STATUS ROLES AGE VERSION
master Ready master 10m v1.14.0
node01
node02
YAML檔案
在Kubernetes中,各種資源都是通過yaml檔案來進行建立。比如,pod、rs、replicaset和deployment等。yaml的編寫區分大小寫。支援map/list的檔案進行編寫。
一個普通的yaml檔案
apiVersion: v1 # 版本資訊
kind: Pod # 當前要建立的資源型別, Pod
metadata: # 後設資料
name: nginx # pod的名字
labels: # pod擁有的label -> app: nginx
app: nginx
spec: # 與pod容器相關的詳情定義
containers: # pod裡面擁有一個container,也可配置多個
- name: nginx # container name===nginx
image: nginx # 所用到的映象 nginx
ports:
- containerPort: 80 # 配置container的埠為80
yaml檔案解釋說明
編寫yaml檔案的時候要使用空格不要使用tab鍵。yaml中存在層級關係,左邊對齊表示同一層級。
# - “空格” name這種形式的寫法表示陣列。以上為例,container屬性下有一個陣列,陣列中有 name image 和 ports
- name
深入瞭解Pod
如果說操作docker的最小單元是容器,那麼和kubernetes打交道涉及到最多的就是pod
建立一個pod
在叢集所在的伺服器中(任意一個節點),建立一個yaml檔案。名字可以自定義,不過一般遵循見名知意的原則。建立一個yaml檔案,名字命名為 ngxin_pod.yaml,內容如下。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 80
根據 nginx_pod.yaml 檔案去建立 pod。以及相關操作。
kubectl apply/create -f nginx_pod.yaml
# 檢視pod資訊
kubectl get pods
# pod詳情資訊
kubectl get pods -o wide
# pod建立描述資訊,例如可檢視pod具體執行在那個節點上等詳細資訊。在對應節點上可檢視pod所對應的正在執行的容器
kubectl describe pod podName
# 刪除pod
kubectl delete -f nginx_pod.yaml
# 並且在叢集內部任意一個節點上訪問建立的pod,網路都是互通的。
ReplicationController(RC)
RC用來維護pod的數量,保證其在任意時刻都符合我們設定的預期值
通過RC實現了叢集中pod的高可用,減少了手工運維工作。
have a try
一個示例yaml檔案
apiVersion: v1
kind: ReplicationController # kind型別選擇為 ReplicationController
metadata:
name: nginx
spec:
replicas: 3 # 指定副本數為 3
selector: # 表示需要管理的pod的label,對應上面命名的 nginx
app: nginx
template: # template表示建立 Pod的模板,用來定義Pod的相關資訊
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
使用該yaml檔案,將會建立三個pod。並且每一個pod都擁有一個app:nginx的label,同時每個Pod中都執行了一個nginx容器。當其中一個pod無法正常執行,Controller Manager能夠及時發現並根據RC的定義,去建立一個新的Pod。
也可以在Pod正在執行的時候對Pod進行擴縮容
kubectl scale rc nginx --replicas=7
# 檢視 rc
kubectl get rc
# 刪除一個pod,驗證rc功能
kubectl delete pods podName
ReplicationSet(RS)
隨著版本的更替,RC升級為另外一個概念:Replica Set。RS和RC的區別在於,RS支援基於集合的Label Selector。功能更為強大。
簡單示例
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: frontend
spec:
matchLabels:
tier: frontend
matchExpressions:
- {key:tier,operator: In,values: [frontend]}
template:
...
值得注意的是,一般不單獨使用ES。而是使用更高的資源物件Deployment,從而形成一整套Pod的操作流程和編排機制。無需擔心各種機制間的相容問題。
Deployment
Deployment相對RS和RC來說是更高等級的資源型別。我們可以隨時知道當前Pod的“部署”進度。
yaml示例
apiVersion: apps/v1
kind: Deployment # 資源型別 Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 # 指定副本集數量
selector:
matchLabels:
app: nginx
template: # 建立pod模版
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
# 檢視 deployment
kubectl get deployment -o wide
# 更新映象版本
kubectl set image deployment nginx-deployment nginx=nginx:1.9.1
Namespace
在kubernetes中,Pod屬於不同的Namespace。Namespace是一個邏輯上的概念。在建立Pod的時候可以給Pod指定Namespace
Kubernetes中有著預設的Namespace,名字為default。
# 獲取 default 下的pods
kubectl get pods
# 獲取指定Namespace下的 pods
kubectl get pods -n NamespaceName
# 獲取所有的 Namespace
kubectl get ns
建立Namespace
apiVersion: v1
kind: Namespace
metadata:
name: mns
建立一個資源,指定在 mns 下
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: mns
......
相關文章
- Electron初體驗
- vscode初體驗VSCode
- SpringMVC初體驗SpringMVC
- ollama 初體驗
- laravel初體驗Laravel
- golang 初體驗Golang
- AQS初體驗AQS
- Compose初體驗
- krpano初體驗
- Angular 初體驗Angular
- outline初體驗
- Selenium 初體驗
- Loki 初體驗Loki
- gRPC初體驗RPC
- ReactNative初體驗React
- OpenCV 初體驗OpenCV
- http初體驗HTTP
- Prettier初體驗
- wepy初體驗
- Flutter初體驗Flutter
- Nuxt 初體驗UX
- jQuery初體驗jQuery
- indexedDB 初體驗Index
- web assembly 初體驗Web
- Argo CD初體驗Go
- .Net Aspire初體驗
- Laravel Octane 初體驗Laravel
- go modules 初體驗Go
- 10、Swoole 初體驗
- Kali Nethunter初體驗
- Mybatis初體驗(二)MyBatis
- Vue 初體驗(上)Vue
- Python初體驗——列表Python
- Github codespaces 初體驗Github
- react hooks初體驗ReactHook
- React Native 初體驗React Native
- Shiro-初體驗
- html初體驗#2HTML