基本概念
https://www.redhat.com/zh/topics/containers/kubernetes-architecture
https://www.kubernetes.org.cn/kubernetes設計架構
架構
node
Node是Pod真正運行的主機,可以物理機,也可以是虛擬機。為了管理Pod,每個Node節點上至少要運行container runtime(比如docker或者rkt)、kubelet和kube-proxy服務。
pod
在Kubernetes中,最小的管理元素不是一個個獨立的容器,而是Pod,Pod是最小的,管理,創建,計划的最小單元, 一個pod中可以定義多個容器, 多個容器共享存儲和網絡
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-storage
mountPath: /data/redis
volumes:
- name: redis-storage
emptyDir: {}
service
https://kubernetes.io/zh/docs/concepts/services-networking/connect-applications-service/
Kubernetes中一個應用服務會有一個或多個實例(Pod,Pod可以通過rs進行多復本的建立),每個實例(Pod)的IP地址由網絡插件動態隨機分配(Pod重啟后IP地址會改變)。為屏蔽這些后端實例的動態變化和對多實例的負載均衡
namespace
Namespace是對一組資源和對象的抽象集合,比如可以用來將系統內部的對象划分為不同的項目組或用戶組。常見的pods, services, replication controllers和deployments等都是屬於某一個namespace的(默認是default),而node, persistentVolumes等則不屬於任何namespace。
Namespace常用來隔離不同的用戶,比如Kubernetes自帶的服務一般運行在kube-system namespace中。
deployment
Deployment為Pod和ReplicaSet提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController來方便的管理應用。典型的應用場景包括:
- 定義Deployment來創建Pod和ReplicaSet
- 滾動升級和回滾應用
- 擴容和縮容
- 暫停和繼續Deployment
k8s基本結構圖
https://jimmysong.io/kubernetes-handbook/guide/kubectl-cheatsheet.html
https://swissarmydevops.com/containers/kubernetes/kubernetes-cheat-sheet
K8S基本操作命令(命令+截圖)
- 取個別名, 替換kubectl -n test-center-12345678910
alias kk='kubectl -n test-center-12345678910'
## 不用每次都輸那么一長串的namespace了
kk get pod
kk get deployment
- 如何查看運行的POD
kubectl get pod --all-namespaces
kubectl -n ns-account get pod
kubectl get pods --all-namespaces | grep xdr9n # 查找所有namespace下的pod 然后篩選出某個pod
- 如何啟動一個POD
kubectl apply -f pod.yaml
- 如何停止一個POD
kubectl scale --replicas=0 pod/<pod-name>
- 如何查看POD的狀態(CPU/狀態/內存)
kubectl top pod <pod-name>
CPU 單位: 1核 = 1000m, 0.5核=500m, 通常用m單位, 直接填1表示1核
- 如何查看POD掛載的文件目錄
kubectl describe pod <pod-name>
- 如何進入POD執行命令
kubectl exec -it <pod-name> /bin/bash
- 如何查看POD的運行配置
kubectl exec -it <pod-name> /bin/bash # 進入容器cd /app/app/remote/ # 進入容器內部的應用目錄, 目前我們大部分中心化應用用的目錄是 /app/app/remote
- 如何查案運行Service
kubectl get svc