容器来源

使用 nginx 的官方容器镜像。

发布容器的两种方法

镜像有了,我们如何将其提交给 K8S 运行呢,有两种方法:

  1. 命令行方法(不引荐)。
  2. 配置文件方法(引荐)。

这里使用官方引荐的第二种方法,即通过将容器的各种信息写入配置文件提交给 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 里包含了容器