Kubernetes(通??s寫為K8s)是一個開源的容器編排平臺,用于自動化應用程序的部署、擴展和管理。它最初由Google開發,并于2014年開源。Kubernetes的設計目標是提供一個可擴展、高可用的平臺,用于管理容器化應用程序。
Kubernetes的核心功能包括:
Pod是Kubernetes中最小的部署單元。一個Pod可以包含一個或多個容器,這些容器共享相同的網絡命名空間和存儲卷。Pod是短暫的,它們可以被創建、銷毀和替換。
Node是Kubernetes集群中的工作節點,可以是物理機或虛擬機。每個Node上運行著Kubelet,它是Kubernetes的代理,負責與主節點通信并管理Pod。
Service是Kubernetes中的一種抽象,用于定義一組Pod的訪問策略。Service可以為Pod提供穩定的IP地址和DNS名稱,并負責負載均衡。
Deployment是Kubernetes中用于管理Pod副本的控制器。它允許用戶定義Pod的期望狀態,并自動確保實際狀態與期望狀態一致。Deployment還支持滾動更新和回滾。
Namespace是Kubernetes中的一種虛擬集群,用于將資源分組和管理。不同的Namespace可以包含相同名稱的資源,但它們彼此隔離。
Minikube是一個用于在本地運行單節點Kubernetes集群的工具。它非常適合開發和測試。
# 安裝Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 啟動Minikube
minikube start
kubeadm是Kubernetes官方提供的用于快速部署多節點集群的工具。
# 安裝kubeadm
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 初始化主節點
sudo kubeadm init
# 加入工作節點
kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
kubectl是Kubernetes的命令行工具,用于與集群交互。
# 安裝kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
kubectl apply -f pod.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
kubectl apply -f service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
kubectl apply -f deployment.yaml
kubectl scale deployment my-deployment --replicas=5
kubectl set image deployment/my-deployment my-container=nginx:1.19
ClusterIP是默認的Service類型,它為Pod提供一個集群內部的IP地址。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
NodePort在每個Node上打開一個端口,允許外部流量訪問Service。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
nodePort: 30007
LoadBalancer為Service提供一個外部負載均衡器。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
Ingress用于管理外部HTTP/HTTPS流量的路由。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Volume是Kubernetes中用于持久化存儲的抽象。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: my-volume
volumes:
- name: my-volume
hostPath:
path: /data
type: Directory
PersistentVolume(PV)是集群中的一塊存儲資源。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
PersistentVolumeClaim(PVC)是用戶對存儲資源的請求。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Metrics Server是Kubernetes集群中的資源使用情況監控工具。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Prometheus是一個開源的監控和告警系統。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/prometheus
EFK Stack(Elasticsearch, Fluentd, Kibana)用于日志收集和可視化。
helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch
helm install fluentd elastic/fluentd
helm install kibana elastic/kibana
RBAC(Role-Based Access Control)用于控制用戶和服務的訪問權限。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
Network Policies用于控制Pod之間的網絡流量。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: my-network-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
Secrets用于存儲敏感信息,如密碼和API密鑰。
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
CRDs允許用戶定義自己的資源類型。
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
scope: Namespaced
names:
plural: myresources
singular: myresource
kind: MyResource
shortNames:
- mr
Operators是Kubernetes的擴展,用于自動化應用程序的管理。
kubectl apply -f https://operatorhub.io/install/etcd-operator.yaml
為容器設置資源限制和請求,以確保資源的合理分配。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
為容器設置健康檢查,以確保應用程序的可用性。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
使用Horizontal Pod Autoscaler(HPA)自動擴展應用程序。
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Kubernetes是一個功能強大的容器編排平臺,它提供了自動化部署、擴展、自我修復、負載均衡和存儲編排等功能。通過理解Kubernetes的核心概念、掌握基本操作、配置網絡和存儲、實施監控與日志、加強安全措施、擴展與自定義資源,以及遵循最佳實踐,用戶可以有效地管理和運行容器化應用程序。Kubernetes的靈活性和可擴展性使其成為現代云原生應用的首選平臺。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。