美文网首页我是程序员阿里云Docker容器
阿里云容器服务DaemonSet实践

阿里云容器服务DaemonSet实践

作者: 阿里云云栖号 | 来源:发表于2019-01-04 15:37 被阅读49次

    DaemonSet 保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。下面以日志收集 fluentd 为例,看下如何使用阿里云容器服务控制台创建DaemonSet。

    准备Kubernetes环境

    在阿里云容器服务控制台中创建Kubernetes 集群(1.11.5),3 master,3 worker

    安装fluentd

    1、选择应用->守护进程集->使用镜像创建

    填写应用名称,选择部署集群、命名空间,进入下一步

    2、选择镜像并进行相应配置

    注意:这里挂载了配置项fluentd-conf,用来覆盖镜像中的默认配置,需要提前创建出来,内容如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: fluentd-conf
      namespace: kube-system
    data:
      td-agent.conf: |
        <match fluent.**>
          type null
        </match>
        <source>
          type tail
          path /var/log/containers/*.log
          pos_file /var/log/es-containers.log.pos
          time_format %Y-%m-%dT%H:%M:%S.%NZ
          tag kubernetes.*
          format json
          read_from_head true
        </source>
        <filter kubernetes.**>
          type kubernetes_metadata
          verify_ssl false
        </filter>
    

    否则会遇到pod 启动问题

    [error]: config error file="/etc/td-agent/td-agent.conf" error="Invalid Kubernetes API v1 endpoint https://172.21.0.1:443/api: SSL_connect returned=1 errno=0 state=error: certificate verify failed"
    

    3、设置更新策略

    可以在高级配置中选择升级方式:

    • 滚动升级(RollingUpdate):更新 DaemonSet 模版后,自动删除旧的 Pod 并创建新的 Pod
    • 替换升级(OnDelete):更新模板后,只有手动删除了旧的 Pod 后才会创建新的 Pod

    4、指定节点调度

    只选择worker节点安装。设置节点亲和性如图。


    5、创建完成

    点击创建,可以看到创建成功。

    6、问题排查与更新

    按着上述步骤可以看到在3个worker节点分别起了对应的pod,但pod并没有成功启动。选择其中的一个容器,查看一下日志发现如下错误:

    config error file="/etc/td-agent/td-agent.conf" error="Exception encountered fetching metadata from Kubernetes API endpoint: pods is forbidden: User cannot list pods at the cluster scope"
    

    Google后发现需要设置ClusterRole

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: fluent-account
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: fluent-account
    roleRef:
      kind: ClusterRole
      name: view
      apiGroup: rbac.authorization.k8s.io
    subjects:
      - kind: ServiceAccount
        name: fluent-account
        namespace: kube-system
    

    创建成功后更新fluent-es 的yaml,编辑yaml,提交更新。


    Pod启动成功,日志已经可以正常采集了。


    总结

    使用阿里云容器服务控制台支持方便的创建DaemonSet,欢迎使用体验。https://cs.console.aliyun.com/



    本文作者:来随便逛逛

    阅读原文

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:阿里云容器服务DaemonSet实践

        本文链接:https://www.haomeiwen.com/subject/wamhrqtx.html