# 1、創建Deployment
最常見的K8s對象是部署對象。部署對象定義了所需的容器,以及Kubernetes的其他部分用于發現和連接應用程序的名稱和標簽。
## Task
復制下面的定義到編輯器。這定義文件定義了怎么啟動名叫webapp1的應用。它使用Docker鏡像katacoda/dokcker-http-server運行在80端口。
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp1
spec:
replicas: 1
selector:
matchLabels:
app: webapp1
template:
metadata:
labels:
app: webapp1
spec:
containers:
- name: webapp1
image: katacoda/docker-http-server:latest
ports:
- containerPort: 80
```
部署到集群使用命令:
```
kubectl create -f deployment.yaml
```
由于這是一個部署對象,可以通過命令獲得一系列的部署對象:
```
kubectl get deployment
```
單個部署的詳細信息可以通過輸出通過:
```
kubectl describe deployment webapp1
```
# 2、創建Service
K8s有控制應用通信的強大網絡能力。這些網絡配置也可以通過YAML配置。
## Task
復制Service定義到編輯器。這Service選擇所有標簽為webapp1的應用。由于多個副本或實例被部署了,他們將會自由基于這個共同的標簽負載均衡。這個Service通過NortPort使應用可用。
```
apiVersion: v1
kind: Service
metadata:
name: webapp1-svc
labels:
app: webapp1
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
selector:
app: webapp1
```
所有的K8s對象都使用一致的方式kubectl被部署。
部署Service使用:
```
kubectl create -f service.yaml
```
像之前一樣,詳細查看所有部署的Service對象使用
```
kubectl get svc
```
descibe這個對象關于這個配置查閱更多詳細信息
```
kubectl descirbe svc webapp1-svc
```
```
curl host01:30080
```
# 3、伸縮部署
部署可以根據需要,YAML可以被改變成不同的配置。這遵循了基礎設施即代碼的思維方式。清單應該保存在源代碼控制之下,并用于確保生產中的配置與源代碼控制中的配置相匹配。
## Task
更新deployment.yaml,增加運行實例的數量,例如,這個文件應該是這樣的:
> replicas:4
更新已存在的定義使用kubectl apply。伸縮副本的數量,部署改變過的YAML文件,使用
```
kubectl apply -f deployment.yaml
```
一會,我們集群的期望狀態被更新了,查看:
```
kubectl get deployment
```
為了匹配這個請求,將會調度更多的Pod。
由于所有的pod擁有相同的標簽選擇器,他們將會在Service NortPort部署后負載均衡。
向這個端口發出請求將導致不同的容器處理請求。
```
curl host01:30080
```
更多K8s網絡詳細和對象定義將會在將來的章節介紹。
- 前言
- 安裝minikube
- 啟動一個單節點的Kubernetes集群
- 啟動一個多節點的集群使用kubeadm
- 使用kubectl部署容器
- 使用YAML部署容器
- 在K8s上部署Guestbook(留言簿)示例
- K8s網絡介紹
- 創建Ingress路由
- Liveness(存活探針)、Readiness(就緒探針)和健康檢查
- 使用CRI-O和kubeadm開始
- 在K8s上運行一個有狀態服務
- 管理K8s中的秘鑰和密碼
- 使用Kompose部署Docker Compose文件
- 在Kubernates上從源代碼部署一個服務
- 使用Heptio Velero備份和恢復
- Helm包管理器
- 基本的K8s的可觀察性(監控)
- 使用EFK記錄日志
- 在K8s上安裝Weave Scope