京東雲Kubernetes叢集最佳實踐
容器是Cloud Native的基石,它們之間的關係不言而喻。瞭解容器對於學習Cloud Native也是十分重要的。 近期,京東雲Cloud Native的“ 線上公開課 ”從理論和實踐兩個層面為大家分享了Cloud Native相關的技術知識。在本週的週日,我們還將迎來” Cloud Native時代的應用之路與開源創新“專場技術沙龍。
因此我們今天的文章將會和大家分享關於京東雲Kubernetes叢集的部分最佳實踐。感興趣的小夥伴也可以跟著文件自己動手進行建立。
京東雲Kubernetes叢集採用管理節點全託管的方式,為使用者提供簡單易用、高可靠、功能強大的容器管理服務。該產品完全相容標準Kubernetes API ,整合京東雲網路、儲存等外掛。Kubernetes叢集服務簡化了Kubernetes部署、管理,降低了Kubernetes使用門檻,增強應用的可靠性,提升開發的效率,同時,也能更好地幫助使用者減少資源投入的成本。
部署持久化儲存
京東雲Kubernetes叢集服務整合了京東云云硬碟,您可以在叢集中使用京東云云硬碟作為持久化儲存;
1. 建立PV
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-static
labels:
type: jdcloud-ebs
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
jdcloudElasticBlockStore:
volumeID: vol-ogcbkdjg7x
fsType: xfs
引數說明:
1、如您需要在京東雲Kubernetes叢集服務中使用京東云云硬碟作為持久化儲存,請在PersistentVolume定義時,指定外掛jdcloudElasticBlockStore;
2、VolumeID:指定同地域下為Kubernetes叢集服務提供持久化儲存的雲硬碟ID;
3、Fstype:指定檔案系統型別;目前僅支援ext4和xfs兩種;
4、Capacity:PV 將具有特定的儲存容量。這是使用 PV 的容量屬性設定的;
5、PersistentVolume 可以以資源提供者支援的任何方式掛載到主機上。
京東云云硬碟目前只支援一種模式ReadWriteOnce——該卷可以被單個節點以讀/寫模式掛載;
訪問模式包括:
ReadWriteOnce——該卷可以被單個節點以讀/寫模式掛載
在命令列中,訪問模式縮寫為:
RWO - ReadWriteOnce
京東云為PersistentVolume提供了外掛,外掛型別為:jdcloudElasticBlockStore
注:
- 由於雲硬碟限制一個雲硬碟只能同時掛載一個雲主機,在使用基於PVC的Pod時,建議使用replicas=1來建立一個部署集。StatefulSet可解決多副本問題。
- Pod遷移,PVC遷移(解除安裝舊例項/掛載新例項)預設35秒。
- 透過Deployment部署,刪除Deployment之後,可重新掛載原有PVC到新的Pod裡面。
2. 建立PVC
宣告可以指定一個標籤選擇器來進一步過濾該組卷。只有標籤與選擇器匹配的卷可以繫結到宣告。選擇器由兩個欄位組成:
所有來自 MatchLabels 和 MatchExpressions 的要求都被“與”在一起——它們必須全部滿足才能匹配。
本例使用MatchLabels作為過濾條件,將匹配的PersistentVolume繫結到Persistent Volume Claim。
M atchLabels:Volume 必須有具有該值的標籤
matchExpressions:這是一個要求列表,透過指定關鍵字,值列表以及與關鍵字和值相關的運算子組成。有效的運算子包括 In、NotIn、Exists 和 DoesNotExist。
訪問模式包括:ReadWriteOnce——該卷可以被單個節點以讀/寫模式掛載。
在命令列中,訪問模式縮寫為:RWO - ReadWriteOnce
京東云為Persistent Volume提供了外掛,外掛型別為:jdcloudElasticBlockStore
注:副本數只能指定1。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-static-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: ""
resources:
requests:
storage: 30Gi
selector:
matchLabels:
type: jdcloud-ebs
3. 建立Pod
kind: Pod
apiVersion: v1
metadata:
name: pod-
static
spec:
volumes:
- name: pv-
static
persistentVolumeClaim:
claimName: pv-
static-pvc
containers:
- name: busybox-
static
image: busybox
command:
- sleep
-
"600"
imagePullPolicy: Always
volumeMounts:
- mountPath:
"/usr/share/mybusybox/"
name: pv-
static
當叢集中的靜態 PV 都不匹配新建的 Persistent Volume Claim 時,叢集可能會嘗試動態地為 PVC 建立卷。
關於京東云云硬碟規格:
建立PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1
spec:
accessModes:
- ReadWriteOnce
storageClassName: jdcloud-ssd
resources:
requests:
storage: 20Gi
檢視叢集的PVC
kubectl get pvc
輸出
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc1 Bound pvc
-73d8538b-ebd6
-11e8-a857-fa163eeab14b
20Gi RWO jdcloud-ssd
18s
檢視叢集的PV
kubectl
get pv
輸出
NAME
CAPACITY ACCESS MODES RECLAIM POLICY STATUS
CLAIM STORAGECLASS REASON AGE
pvc
-73d8538b-ebd6
-11e8-a857-fa163eeab14b
20Gi RWO Delete Bound
default/pvc1 jdcloud-ssd
2m
基於Storage Class jdcloud-ssd,為PVC建立了卷。一旦 PV 和 PVC 繫結後,Persistent Volume Claim 繫結是排他性的,不管它們是如何繫結的。 PVC 跟 PV 繫結是一對一的對映。
部署Service
Kubernetes Service
- Kubernetes Service定義了這樣一種抽象:一個 Pod 的邏輯分組,一種可以訪問它們的策略-通常稱為微服務。這一組 Pod 能夠被 Service 訪問到,通常是透過 Label Selector(檢視下面瞭解,為什麼可能需要沒有 Selector 的 Service)實現的。一個 Service 在 Kubernetes 中是一個REST物件,和Pod類似.像所有的 REST 物件一樣, Service 定義可以基於 POST 方式,請求 API Server 建立新的例項。
京東雲Kubernetes整合負載均衡服務,支援建立Load Balance型別的Service,為應用提供安全、可靠的網路。
- 建立的負載均衡會佔用本地域的負載均衡配額,需要保證有足夠配額。
1、建立支援Load Balance型別的Service,命名為myservice.yaml檔案定義如下:
kind: Service
apiVersion: v1
metadata:
name: servicetest
labels:
run: myapp
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30062
type: LoadBalancer
selector:
run: myapp
2、執行Kubectl建立命令,建立一個Service;其中使用相應的YAML檔名稱替換:
kubectl create -f myservice.yaml
3、建立一組Nginx Pod,mynginx.yaml檔案定義如下:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: myapp
replicas: 2
template:
metadata:
labels:
run: myapp
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
4、執行Kubectl建立命令,建立一個Deployment;其中使用相應的YAML檔名稱替換
kubectl create -f mynginx.yaml
5、 檢視已建立成功的Deployment,執行以下命令:
kubectl get pods -l run=myapp -o wide
返回結果如下:
NAME DESIRED CURRENT UP-
TO-DATE AVAILABLE AGE
my-nginx
2
2
2
2
4m
6、檢視相應的Pod執行狀態,
kubectl
get pods -l run=myapp -o wide
返回結果如下:
NAME READY STATUS RESTARTS AGE IP NODE
my-nginx-864b5bfdc7-
6297s
1/
1 Running
23m
172.16.0.10 k8s-node-vmtwjb-0vy9nuo0ym
my-nginx-864b5bfdc7-lr7gq
1/
1 Running
23m
172.16.0.42 k8s-node-vm25q1-0vy9nuo0ym
7、檢視service
7、檢視Service詳情:
kubectl describe service servicetest
可以檢視繫結到Service的Endpoints:
Name: servicetest
Namespace: default
Labels: run=myapp
Annotations: <none>
Selector: run=myapp
Type: LoadBalancer
IP: 172.16.61.58
LoadBalancer Ingress: 114.67.227.25
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 30062/TCP
Endpoints: 172.16.0.10:80,172.16.0.42:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 11m (x9 over 26m) service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 10m service-controller Ensured load balancer
注:Load Balancer Ingress:114.67.227.25為外部公網IP
8、執行如下命令查詢繫結到service的enpoints列表:
kubectl
get ep servicetest
返回
NAME
ENDPOINTS
AGE
servicetest 172
.16.0.10
:80,172
.16.0.42
:80 28
m
9、在瀏覽器中輸入與Service關聯的Load Balance公網IP及埠,看到如下頁面,即表明Nginx服務正常。
歡迎點選“
京東雲
”瞭解更多精彩內容
·END·
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69912185/viewspace-2639309/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes叢集健康檢查最佳實踐
- 三艾雲 Kubernetes 叢集最佳實踐
- TKE 叢集組建最佳實踐
- Kubernetes 叢集無損升級實踐
- 美團點評Kubernetes叢集管理實踐
- 乾貨 | 京東雲部署Wordpress最佳實踐
- KubeSphere 最佳實戰:Kubernetes 部署叢集模式 Nacos 實戰指南模式
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- 京東雲TiDB SQL最佳化的最佳實踐TiDBSQL
- Redis大叢集擴容效能最佳化實踐Redis
- Kubernetes 叢集升級指南:從理論到實踐
- kubernetes實踐之一:Etcd3叢集搭建
- 實踐展示openEuler部署Kubernetes 1.29.4版本叢集
- Kubernetes Deployment 最佳實踐
- 乾貨 | 京東雲賬號安全管理最佳實踐
- kubernetes實踐之十五:Kubernetes叢集主要啟動引數說明
- ELK 效能(4) — 大規模 Elasticsearch 叢集效能的最佳實踐Elasticsearch
- Kubernetes 微服務最佳實踐微服務
- Kubernetes 最佳安全實踐指南
- 京東雲的雲原生理念及 Serverless 最佳實踐Server
- vivo大規模 Kubernetes 叢集自動化運維實踐運維
- vivo大規模Kubernetes叢集自動化運維實踐運維
- kubernetes實踐之十八:叢集各模組之間的通訊
- Docker Swarm 叢集搭建實踐DockerSwarm
- influxDB叢集模式實踐UX模式
- RabbitMQ叢集運維實踐MQ運維
- 乾貨 | 京東雲域名註冊及備案最佳實踐
- Kubernetes 叢集和應用監控方案的設計與實踐
- Kubernetes YAML最佳實踐和策略YAML
- Redis叢集環境搭建實踐Redis
- 京北地區有望形成大資料產業叢集大資料產業
- K8s叢集nginx-ingress監控告警最佳實踐K8SNginx
- 《從 0 到 1:搭建一個完整的 Kubernetes 叢集》實踐踩坑
- 掌握 Kubernetes 故障排除:有效維護叢集的優秀實踐和工具
- Kubernetes叢集選擇最佳設定推薦方案 - daniele
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- Kubernetes叢集搭建(vagrant)