# 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