zoukankan      html  css  js  c++  java
  • 项目环境搭建【Docker+k8s】十 || kubernetes资源配置运行容器


    经过上文的创建文件测试可以感受到,通过run命令启动容器非常麻烦。其中docker提供了compose解决了这个问题,而kubernetes使用kubectl create命令就可以做到和compose一样的效果,该命令可以通过配置文件快速创建一个集群资源对象。

    1、部署Deployment

    创建一个名为nginx-deployment.yml的配置文件,以创建nginx服务为例进行说明

    注意:各版本配置文件内容有所不同,具体请参照官方文档
    (例:v1.15版本apiVersion为extensions/v1beta1,在v1.16在这个版本中Deployment已经从extensions/v1beta1 弃用,更改为apps/v1)。

    #API 版本号
    apiVersion: apps/v1
    #类型,如:Pod/ReplicationController/Deployment/Service/Ingress
    kind: Deployment
    #元数据
    metadata:
      #Kind 的名称
      name: nginx-app
    spec:
      selector: #定义标签选择器
        matchLabels:
          app: nginx
      #部署的实例数量
      replicas: 2
      template:
        metadata:
          labels:
            #容器标签的名字,发布 Service 时,selector 需要和这里对应
            app: nginx
        spec:
          #配置容器,数组类型,说明可以配置多个容器
          containers:
          #容器名称
          - name: nginx
            #容器镜像,不能使用latest
            image: nginx:1.17
            imagePullPolicy: IfNotPresent
            #暴露端口
            ports:
            #Pod 端口
            - containerPort: 80
    

    镜像拉取策略,支持三种ImagePullPolicy:

    • Always:不管镜像是否存在都会进行一次拉取
    • Never:不管镜像是否存在都不会进行拉取
    • IfNotPresent:只有镜像不存在时才会拉取镜像

    注意:

    • 默认为IfNotPresent,而latest标签的镜像默认为Always
    • 拉取镜像时docker会进行校验,如果镜像中的MD5没有变化,则不会拉取镜像数据
    • 生产环境中应该避免使用latest标签,而开发环境可以借助latest标签自动拉取最新的镜像

    创建资源对象

    [root@yn101-22 service]# kubectl create -f nginx-deployment.yml
    #输出如下:
    deployment.apps/nginx-app created
    #查看Pods状态
    [root@yn101-22 service]# kubectl get pods
    NAME                         READY   STATUS    RESTARTS   AGE
    nginx-app-798dcc9989-vs862   1/1     Running   0          3m47s
    nginx-app-798dcc9989-xzg4x   1/1     Running   0          3m47s
    #查看已部署的服务
    [root@yn101-22 service]# kubectl get deployment
    NAME        READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-app   2/2     2            2           4m20s
    #查看已发布的服务
    [root@yn101-22 service]# kubectl get service
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   12h
    

    2、部署Service

    以上配置仅部署了服务,还未运行容器,因此,需要发布服务配置。先停止上一步部署的Deployment

    [root@yn101-22 service]# kubectl delete -f nginx-deployment.yml
    #输出如下:
    deployment.apps "nginx-app" deleted
    

    创建一个名为nginx.yml的配置文件,完整配置内容如下:

    #API 版本号
    apiVersion: apps/v1
    #类型,如:Pod/ReplicationController/Deployment/Service/Ingress
    kind: Deployment
    #元数据
    metadata:
      #Kind 的名称
      name: nginx-app
    spec:
      selector: #定义标签选择器
        matchLabels:
          app: nginx
      #部署的实例数量
      replicas: 2
      template:
        metadata:
          labels:
            #容器标签的名字,发布 Service 时,selector 需要和这里对应
            app: nginx
        spec:
          #配置容器,数组类型,说明可以配置多个容器
          containers:
          #容器名称
          - name: nginx
            #容器镜像,不能使用latest
            image: nginx:1.17
            imagePullPolicy: IfNotPresent
            #暴露端口
            ports:
            #Pod 端口
            - containerPort: 80
     ---
    apiVersion: v1
    kind: Service #指明资源类型是 service
    metadata: #元数据
      name: nginx-http #kind的名称
    spec:
      ports:
      - port: 80 #service暴露的端口
        targetPort: 80 #pod上的端口,将service暴露的短句转发到pod端口上
      type: LoadBalancer
      selector:
        app: nginx #需要和上面部署的deployment标签名对应
    

    创建资源对象

    [root@yn101-22 service]# kubectl create -f nginx.yml
    #输出如下
    deployment.apps/nginx-app created
    service/nginx-http created
    #查看已发布的服务
    [root@yn101-22 service]# kubectl get service
    NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP        13h
    nginx-http   LoadBalancer   10.106.43.210   <pending>     80:30665/TCP   93s
    

    由上可知,服务暴露端口为30665,在node节点进行验证服务是否启动成功。
    分别访问node-01节点(192.168.101.31:30665)和node-02节点(192.168.101.32:30665),能正常访问nginx说明启动服务成功。

    删除服务

    [root@yn101-22 ~]# kubectl delete -f nginx.yml
    #输出如下:
    deployment.apps "nginx-app" deleted
    service "nginx-http" deleted
    

    3、学习交流QQ群【883210148】

    alt QQ群

    4、关注微信公众号,免费获取文档及资源

    alt 微信公众号

  • 相关阅读:
    vue-router 路由拦截 beforeEach 添加静态路由 与 动态添加路由
    elementUI el-upload 根据上传的图片高度,进行自适应宽度
    vue 中 字符串分两行显示
    MySQL中的<=>
    Spring mvc再启动时候会打印项里面的所有路径
    一次解决前后台交互问题
    数据库表分区,分表
    支付宝接口
    打印js中一个对象的所有属性的值
    var
  • 原文地址:https://www.cnblogs.com/kevin-ying/p/12360586.html
Copyright © 2011-2022 走看看