一、容器與K8s
1、什麼是容器
容器是一種輕量級的、可移植的虛擬化技術,將應用程序及其所有依賴項打包到一個可移植的圖像中,以便在不同的計算環境中運行。容器提供了與虛擬機類似的隔離性,可以幫助開發人員在不同的環境中更加輕鬆地構建、打包、分發和部署應用程序。
2、什麼是Kubernetes
Kubernetes(簡稱為K8s)是一個開源的容器編排平台。它可以幫助我們自動化地部署、擴展和管理容器化的應用程序,從而讓我們更加輕鬆地管理複雜的分布式應用程序,同時也降低了運維的成本。
3、容器與K8s的關係
容器是K8s裡面的基本組件,K8s通過容器對應用程序及其依賴項進行打包、分發和部署。K8s還提供了許多高級功能,比如負載均衡、伸縮、自動化應用程序部署等,可以幫助我們更加有效地管理容器化的應用程序。
二、K8s快速入門
1、環境準備
# 安裝Minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube && sudo mv minikube /usr/local/bin/
# 安裝Kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s \
https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl \
&& chmod +x kubectl && sudo mv kubectl /usr/local/bin/
# 啟動Minikube集群
minikube start
2、創建一個Deployment
# 創建一個Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
# 應用程序副本數
replicas: 3
selector:
# 匹配標籤
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
# 鏡像名稱
image: nginx:1.14.2
ports:
- containerPort: 80
3、創建一個Service
# 創建一個Service
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
4、訪問應用程序
kubectl get service nginx-service
# 輸出類似如下內容
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# nginx-service LoadBalancer 10.0.142.100 80:30709/TCP 111s
# 訪問 EXTERNAL-IP:80 即可訪問應用程序
三、使用K8s進行自動化部署
1、使用Docker構建應用程序鏡像
# 在應用程序根目錄下創建一個名為 Dockerfile 的文件
# 編寫Dockerfile,示例:
FROM node:12.13.0-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
# 構建鏡像
docker build -t myapp:v1 .
2、使用Kubectl進行部署
# 創建一個Deployment
kubectl create deployment myapp --image=myapp:v1 --replicas=3
# 創建一個Service
kubectl expose deployment myapp --type=LoadBalancer --port=80
3、使用Helm進行自動化部署
# 安裝Helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# 添加一個Helm倉庫
helm repo add stable https://charts.helm.sh/stable
# 安裝一個Chart
helm install myapp stable/mysql
四、K8s的高級特性
1、自動伸縮
K8s可以根據資源利用率自動伸縮應用程序,讓我們無需手動調整容器的數量。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 500Mi
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
2、服務發現和負載均衡
K8s可以自動發現容器,並且提供了負載均衡功能,讓我們輕鬆地訪問容器化的應用程序。
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: myapp
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myapp-ingress
spec:
backend:
serviceName: myapp
servicePort: 80
3、配置管理
K8s可以幫助我們輕鬆地管理應用程序的配置文件,讓我們可以快速地更改應用程序的配置。
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
data:
DB_HOST: mydb
DB_USER: user
DB_PASSWORD: password
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
envFrom:
- configMapRef:
name: myapp-config
五、總結
K8s是一個功能強大、靈活性高的容器編排平台,在大規模容器化應用程序的部署和管理方面有着重要的作用。本文通過從容器和K8s、K8s快速入門、自動化部署、K8s的高級特性等幾個方面詳細闡述了K8s的相關知識,並給出了相應的代碼示例,相信讀者可以更加深入地了解K8s,並將其應用到實際的開發工作中。
原創文章,作者:ZFLCR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/369170.html