前言
今天在 K8S 集群中跑一个容器化应用。
更新历史
- 20200518 - 初稿 - 左程立
- 原文地址 - https://blog.zuolinux.com/2020/05/18/first-app-on-k8s.html
如何发布容器到 K8S 中
容器来源
使用 nginx 的官方容器镜像。
发布容器的两种方式
镜像有了,我们如何将其提交给 K8S 运行呢,有两种方式:
- 命令行方式(不推荐)。
- 配置文件方式(推荐)。
这里使用官方推荐的第二种方式,即通过将容器的各种信息写入配置文件提交给 K8S。
定义容器配置文件
创建一个 nginx.yaml 文件
[root@master01 ~]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
hostAliases:
- ip: "10.20.20.20"
hostnames:
- "test1.com"
- "test2.com"
部署容器到 K8S 中
[root@master01 ~]# kubectl apply -f nginx.yaml
pod/nginx created
查看容器的运行情况
[root@master01 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 93s 192.10.205.195 work01 <none> <none>
查看容器的具体信息
所有重要操作,都会被记录在kubectl describe 指令返回的 Events 里,用于 DEBUG
[root@master01 ~]# kubectl describe pod nginx
Name: nginx
Namespace: default
Priority: 0
Node: work03/192.168.10.17
IP: 192.10.137.130
.....省略......
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/nginx to work03
Normal Pulled 74s kubelet, work03 Container image "nginx:1.7.9" already present on machine
Normal Created 73s kubelet, work03 Created container nginx
Normal Started 73s kubelet, work03 Started container nginx
升级容器中nginx版本
# 修改 nginx.yaml
image: nginx:1.9.0
# 提交给 K8S
# kubectl apply -f nginx.yaml
删除该容器应用
[root@master01 ~]# kubectl delete -f nginx.yaml
pod "nginx" deleted
[root@master01 ~]# kubectl get pods
No resources found in default namespace.
nginx.yaml 参数简介
参数定义,分为 metadata 和 Spec 两部分:
metadata 存放元数据
Spec 存放这个对象独有的定义,用于描述它要表达的功能
kind: Pod
指明是一个 Pod 类型的API对象,该对象操作管理另一种 API 对象即Pod
metadata
API 对象的标识,即这个 Pod 的标识
spec.containers
表明是一个容器相关参数
spec.hostAliases
给容器的 /etc/hosts 文件中增加解析
查看 Pod 帮助文档
[root@master01 ~]# kubectl explain Pod
结束语
今天发布了一个容器应用到K8S中。
我们可以看到,容器确保了"系统环境"在开发/测试/生产中的一致性,YAML 配置文件可以确保"配置参数"的一致性。
但好像有点晕,不是发布容器吗,那么 Pod 又是什么?
Pod 把容器进行了包装,K8S 可以操作的最小单元是 Pod,Pod 里包含了容器。
联系我
微信公众号:zuolinux_com
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。