• K8S实战(二)| 发布容器到 K8S 集群中


    前言

    今天在 K8S 集群中跑一个容器化应用。

    更新历史

    如何发布容器到 K8S 中

    容器来源

    使用 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 里包含了容器。

    联系我

    微信公众号:zuolinux_com

    微信扫码关注

  • 相关阅读:
    cobbler自动安装系统(Centos7.X)
    企业级全网服务监控
    javascript中的getElementById、getElementsByName、getElementByTagName详解
    JavaScript中Math对象
    网络编程这结构体发送
    vue中'. native'修饰符的使用
    vue中render: h => h(App)的详细解释
    关于内存对齐的几点记忆
    _initialize() 与__construct()的区别
    PHP的 __DIR__ 作用
  • 原文地址:https://www.cnblogs.com/zuolinux/p/13693426.html
Copyright © 2020-2023  润新知