rancher2.0快速入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rancher2.0快速入门相关的知识,希望对你有一定的参考价值。

参考技术A 注意:本入门指南的目的是让您快速的运行一个Rancher2.0环境,它不适用于生产。有关更全面的说明,请查阅 Rancher安装 .

本教程将指导您完成:

安装Rancher v2.0 ;

创建第一个集群;

部署一个应用程序,如nginx

一、入门须知

熟悉Linux基础命令;

了解SSH使用方法,了解公钥/私钥工作原理;

熟悉Docker基本使用方法及基础命令,比如:容器日志查看;

了解SSL证书使用方法;

了解负载均衡工作原理(L4/L7);

了解域名解析原理;

了解K8S基本概念

二、配置Linux主机

通过配置Linux主机开始创建自定义集群。您的主机可以是:

云主机

本地虚拟机

本地物理机

注意:在使用云主机时,您需要允许TCP/80和TCP/443入站通信端口。请查阅您的云主机文档以获取有关端口配置的信息。有关端口要求的完整列表,请查阅 端口需求 .

根据以下要求配置主机:

Ubuntu 16.04 +(64位)

Centos/RedHat Linux 7.5+(64位)

RancherOS 1.3.0+(64位)

Ubuntu操作系统有Desktop和Server版本,选择安装server版本.

1、硬件需求:

CPU: 2C

内存: 4GB

注意:此配置仅为满足小规模测试环境的最低配置。如用于生产,请参考 基础配置要求 。

2、软件需求:

软件: Docker

支持的Docker版本:

17.03.x

18.06.x

18.09.x

注意:有关Docker安装说明,请访问其 文档 。软件需求要应用于所有节点。

主机的更详细配置说明,请查看 基础环境配置

三、安装Rancher

要想在主机上安装Rancher,需要先登录到主机上,接着进行以下步骤:

通过shell工具(例如PuTTy或远程终端连接)登录到主机

在shell中执行以下命令:

四、登录Rancher

登录并开始使用Rancher。登录后,您将进行一些一次性配置。

打开浏览器,输入https://<server_ip>,server_ip替换为运行Rancher容器主机的ip;

因为是自动使用的自签名证书,在第一次登录会提示安全授信问题,信任即可;

设置管理员密码

第一次登录会要求设置管理员密码,默认管理员账号为: admin

如果没有设置密码而要求输入当前密码,可以输入密码: admin

设置Rancher Server URL

Rancher Server URL是agent节点注册到rancher serverd的地址,需要保证这个地址能够被agent主机访问,不要设置为127.0.0.1或者localhost。

五、创建K8S集群

现在创建第一个Kubernetes集群,可以使用自定义选项。您可以添加云主机、内部虚拟机或物理主机作为集群节点,节点可以运行任何一种或多种主流Linux发行版:

页面右下角可以切换语言;

在全局视图下,点击菜单中的集群 , 并点击添加集群;

选择 Custom,并设置集群名称,其他参数可不用修改,点击下一步;

选择节点运行的角色

默认会勾选Worker角色,根据需要可以一次勾选多种角色。比如,假设我只有一个节点,那就需要把所有角色都选择上,选择后上面的命令行会自动添加相应的命令参数;

如果是云主机,需要添加主机的内网地址和对应的公网地址,如果是没有公网的云主机,可以跳过这步;

其他参数保持默认,点击命令行右侧的复制按钮,复制命令参数

如果是多台主机,根据角色的不同,需要复制多次

登录预添加集群的主机,执行以上复制的命令;

在主机上执行完命令后,最后点击完成;

回到全局视图,可以查看集群的部署状态;

点击集群名称,进入集群视图

点击菜单栏主机按钮

集群创建完成

集群创建完成后,默认会生成Default项目,点击Default切换到项目视图;

六、部署工作负载

工作负载是一个对象,包括pod以及部署应用程序所需的其他文件和信息。我们以nginx作为例如:

在Default视图下,点击工作负载—部署服务

在部署工作负载页面,设置工作负载名称、副本数量、镜像名称、命名空间、端口映射,其他参数保持默认,最后点击启动;

部署完成

通过31174端口去访问nginx服务。

Rancher 2.6 全新 Logging 快速入门

作者简介
万绍远,CNCF 基金会官方认证 Kubernetes CKA&CKS 工程师,云原生解决方案架构师。对 ceph、Openstack、Kubernetes、prometheus 技术和其他云原生相关技术有较深入的研究。参与设计并实施过多个金融、保险、制造业等多个行业 IaaS 和 PaaS 平台设计和应用云原生改造指导。

概述

本篇为 Rancher 2.6 全新 Logging 快速入门 的后续,为实际生产配置使用手册。主要介绍以下日志收集配置功能:

  • 审计日志收集;
  • Kubernetes 组件日志收集;
  • 运行在 Kubernetes 上的容器应用日志收集;
  • Runtime 日志收集;
  • Kubernetes 事件收集和节点;
  • 节点 Kernel 日志收集。

Rancher 2.6 日志采用了 logging-operator 方式进行日志管理,对应概念如下:

  • logging:用于定义一个日志采集端 (FleuntBit) 和传输端 (Fleuntd) 服务的基础配置,在 SUSE Rancher 2.6 版本中,已经由 Rancher 自动化部署完成;
  • flow:用于定义一个 namespaces (命名空间)级别的日志过滤、解析和路由等规则;
  • clusterflow:用于定义一个集群级别的日志过滤、解析和路由等规则;
  • output:用于定义 namespace (命名空间)级别的日志的输出和参数,它只能被同命名空间内的 flow 关联;
  • clusteroutput:用于定义集群级别的日志输出和参数,它能把被其他命名空间内的 flow 关联。

Logging 配置使用

ElasticSearch 和 kibana 部署

为了更好地演示效果,这里部署临时的 ElasticSearch 和 kibana 作为演示环境:

docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.5.2
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.16.1.232:9200 -p 5601:5601 -d kibana:7.5.2

注:将 ELASTICSEARCH_HOSTS 地址修改为实际 ElasticSearch 的地址。

部署完后可通过 http://ip:9200 访问 ElasticSearch,通过 http://ip:5601 访问 Kibana。

启用 Rancher Logging

切换到对应集群,选择 cluster-Tools——>Logging,并勾选自定义 Helm 选项:

systemd Log Path 存储的是系统日志,因为 k3s 和 RKE2 发行版日志都存储在此。因此为了收集此日志,需要进行配置此选项:

要确定目录位置,可在其中一个节点上运行:cat /etc/systemd/journald.conf | grep -E ^\\#?Storage | cut -d"=" -f2

  • 如果返回 persistent,则应为: systemdLogPath/var/log/journal
  • 如果返回 volatile,则应为:systemdLogPath/run/log/journal
  • 如果返回 auto,请检查是否存在 /var/log/journal
  • 如果存在 /var/log/journal,则使用 /var/log/journal
  • 如果不存在 /var/log/journal,则使用/run/log/journal
  • SLES15 默认为/run/log/journal

部署前勾选编辑 yaml,进行以下参数修改:

  • 修改 loggint-Operator 的默认配置,如 fluentd 和 fluentbit 默认资源限制和容忍规则,将 fluentbit 部署到 Controller 节点用于系统日志收集。
  • bufferStorageVolume 为 fluentd 收集 fluentbit 的 log buffer 目录,有分布式文件系统存储,建议存储到分布式文件系统中,修改 storageClassName 为实际分布式存储的 stroageclass 名字。如果没有对应存储,可以修改为bufferStorageVolume: .

替换以下内容:

fluentbit:
  filterKubernetes:
    Merge_Log: ''
    Merge_Log_Key: ''
    Merge_Log_Trim: ''
    Merge_Parser: ''
  inputTail:
    Buffer_Chunk_Size: ''
    Buffer_Max_Size: ''
    Mem_Buf_Limit: ''
    Multiline_Flush: ''
    Skip_Long_Lines: ''
  resources:
    limits:
      cpu: 500m
      memory: 1024M
    requests:
      cpu: 50m
      memory: 100M
  tolerations:
    - effect: NoSchedule
      key: cattle.io/os
      operator: Equal
      value: linux
    - operator: Exists
fluentd:
  bufferStorageVolume:
      pvc:
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 40Gi
          storageClassName: fast
          volumeMode: Filesystem
  livenessProbe:
    initialDelaySeconds: 30
    periodSeconds: 15
    tcpSocket:
      port: 24240
  nodeSelector: 
  resources:
    limits:
      cpu: '2'
      memory: 4096M
    requests:
      cpu: 500m
      memory: 100M
  tolerations: 
  replicas: 3
fullnameOverride: ''

执行以下命令检查部署是否成功:

kubectl get pod -n cattle-logging-system

NAME                                           READY   STATUS      RESTARTS   AGE
rancher-logging-96b68cc4b-vqxnd                1/1     Running     0          9m54s
rancher-logging-fluentbit-cntgb                1/1     Running     0          69s
rancher-logging-fluentbit-hwmdx                1/1     Running     0          71s
rancher-logging-fluentbit-nw7rw                1/1     Running     0          71s
rancher-logging-fluentd-0                      2/2     Running     0          9m34s
rancher-logging-fluentd-1                      2/2     Running     0          9m34s
rancher-logging-fluentd-2                      2/2     Running     0          9m34s
rancher-logging-fluentd-configcheck-ac2d4553   0/1     Completed   0          9m48s

集群审计日志开启和采集

要在集群所有 Controller 节点上创建审计日志策略,需要在主机创建审计日志策略文件 /etc/kubernetes/audit-policy.yaml,内容如下:

apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
- "RequestReceived"
rules:
- level: Metadata

添加集群参数,从Cluster-Manager 选择对应的集群 —> edit Config,给 Api-server 添加以下参数:

kube-apiserver-arg:
    - audit-log-maxsize=100
    - audit-log-maxage=60
    - audit-log-maxbackup=10
    - audit-policy-file=/etc/kubernetes/audit-policy.yaml

参数解释:

  • maxsize:表示日志量多大时进行一次轮转
  • maxage:表示保留审计日志多少天
  • maxbackup:表示保留审计日志文件多少份
  • policy-file:定义审计日志保存策略

添加 apiserver 目录映射参数:

 kube-apiserver-extra-mount:
        - /etc/kubernetes:/etc/kubernetes

因为 api-server 是 pod 方式启动,为了能加载 auditlog-policy,需要将此目录映射到 api-server pod 中。

完成后,集群会进入自动升级模式。等待升级完成,集群审计日志将存储在/var/lib/rancher/rke2/server/logs/audit.log文件和目录。

Kubernetes 组件日志收集

RKE2 Kubernetes 组件日志都集中在以下 namespace 中,在启动 logging 时,配置日志目录会自动部署采集器进行采集:

应用以下 Yaml 到集群中:

apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: test-output
  namespace: cattle-logging-system
spec:
  elasticsearch:
    buffer:
      timekey: 1m
      timekey_wait: 30s
      timekey_use_utc: true
    host: 172.16.1.166
    port: 9200
    scheme: http
    reconnect_on_error: true
    reload_on_failure: true
    reload_connections: false
    logstash_format: true
    logstash_prefix: k8s-components
---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
  name: test
  namespace: cattle-logging-system
spec:
  globalOutputRefs:
  - test-output
  match:
  - select:
      namespaces:
        - cattle-monitoring-system
        - cattle-system
        - kube-system
  • ClusterOutput:定义日志发送到哪,这里配置的是 ElasticSearch,根据实际情况,修改 ElasticSearch 的地址;
  • Logstash_prefix 定义的是对应的 ElasticSearch 内的 index 名称。建议根据对应集群名称配置;
  • Logstash_prefix:定义发送到 ES 后对应的 Index 名称;
  • Logstash_format:表示开启 Index 按天自动创建轮转;
  • ClusterFlow:用于定义一个集群级别的日志过滤、解析和路由等规则,在这里 labels 与对应的采集 pod 的 label 相关连,这里启动 Hosttailer 后会自动启动收集 pod 和集群层级收集关联;
  • GlobalOutputRefs 定义的为上面配置的 ClusterOutput 的名称,表示输出到什么地方。

Kubernetes Application 日志采集

应用以下 Yaml 到集群中:

apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: k8s-application-output
  namespace: cattle-logging-system
spec:
  elasticsearch:
    buffer:
      timekey: 1m
      timekey_wait: 30s
      timekey_use_utc: true
    host: 172.16.1.166
    port: 9200
    scheme: http
    reconnect_on_error: true
    reload_on_failure: true
    reload_connections: false
    logstash_format: true
    logstash_prefix: k8s-application

---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
  name: test
  namespace: cattle-logging-system
spec:
  globalOutputRefs:
  - k8s-application-output
  match:
  - exclude:
      namespaces:
        - cattle-monitoring-system
        - cattle-system
        - cattle-logging-system
        - kube-system
        - cattle-fleet-system
  - select: 

通过 exclude 将系统组件命名空间排除在外,采集的便是全部应用的标准输出日志。

Runtime 日志采集

应用以下 Yaml 到集群中:

apiVersion: logging-extensions.banzaicloud.io/v1alpha1
kind: HostTailer
metadata:
  name: runtimelog-hosttailer
  namespace: cattle-logging-system
spec:
  fileTailers:
    - name: runtime-tail
      path: /var/lib/rancher/rke2/agent/containerd/containerd.log
      buffer_max_size: 64k   #此值一定要修改,不然启动不成功
      disabled: false
      skip_long_lines: "true"
      containerOverrides:
        image: www.wanshaoyuan.com/rancher/mirrored-fluent-fluent-bit:1.8.15
  workloadOverrides:
      tolerations:
      - effect: NoSchedule
        key: cattle.io/os
        operator: Equal
        value: linux
      - operator: Exists
---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: runtimelog-tailer-clusteroutput
  namespace: cattle-logging-system
spec:
  elasticsearch:
    buffer:
      timekey: 1m
      timekey_wait: 30s
      timekey_use_utc: true
    reconnect_on_error: true
    reload_on_failure: true
    reload_connections: false
    host: 172.16.1.166
    port: 9200
    scheme: http
    logstash_format: true
    logstash_prefix: cluster1-runtimelog-tailer


---
apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
  name: runtimetailer-flow
  namespace: cattle-logging-system
spec:
  filters:
  - tag_normaliser: 
  - parser:
      parse:
        type: none
  match:
  - select:
      labels:
        app.kubernetes.io/instance: runtimelog-hosttailer-host-tailer
  globalOutputRefs:
    - runtimelog-tailer-clusteroutput

配置审计日志采集

应用以下 Yaml 到集群中:

apiVersion: logging-extensions.banzaicloud.io/v1alpha1
kind: HostTailer
metadata:
  name: auditlog-hosttailer
  namespace: cattle-logging-system
spec:
  fileTailers:
    - name: audit-tail
      path: /var/lib/rancher/rke2/server/logs/audit.log
      buffer_max_size: 64k   #此值一定要修改,不然启动不成功
      disabled: false
      skip_long_lines: "true"
      containerOverrides:
        image: www.wanshaoyuan.com/rancher/mirrored-fluent-fluent-bit:1.8.15
  workloadOverrides:
      tolerations:
      - effect: NoSchedule
        key: cattle.io/os
        operator: Equal
        value: linux
      - operator: Exists
---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: auditlog-tailer-clusteroutput
  namespace: cattle-logging-system
spec:
  elasticsearch:
    buffer:
      timekey: 1m
      timekey_wait: 30s
      timekey_use_utc: true
    reconnect_on_error: true
    reload_on_failure: true
    reload_connections: false
    host: 172.16.1.166
    port: 9200
    scheme: http
    logstash_format: true
    logstash_prefix: cluster1-auditlog-tailer


---
apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
  name: hosttailer-flow
  namespace: cattle-logging-system
spec:
  filters:
  - tag_normaliser: 
  - parser:
      parse:
        type: json
  match:
  - select:
      labels:
        app.kubernetes.io/instance: auditlog-hosttailer-host-tailer
  globalOutputRefs:
    - auditlog-tailer-clusteroutput
  • containerOverrides: 定义的是离线部署的镜像,默认镜像地址为 fluent/fluent-bit:1.8.15;
  • HostTailer:定义采集的文件,并自动部署 fluent-bit 进行挂载映射;
  • ClusterOutput:定义日志发送到哪,这里配置的是 ElasticSearch,根据实际情况,修改 ElasticSearch 的地址,logstash_prefix 定义的是对应的 ElasticSearch 内的 index 名称。建议根据对应集群名称配置;
  • Flow:用于定义一个 namespaces (命名空间)级别的日志过滤、解析和路由等规则,在这里 labels 与对应的采集 pod 的 label 相关连,这里启动 hosttailer 后会自动启动收集 pod,它的 label 为app.kubernetes.io/instance: auditlog-hosttailer-host-tailer;
  • globalOutputRefs 定义的为上面配置的 ClusterOutput 的名称,表示输出到什么地方。

Event 收集

应用以下 Yaml 到集群中:

apiVersion: logging-extensions.banzaicloud.io/v1alpha1
kind: EventTailer
metadata:
  name: rancher
spec:
  controlNamespace: cattle-logging-system
  containerOverrides:
     image: www.wanshaoyuan.com/rancher/eventrouter:v0.1.0
---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: event-tailer-clusteroutput
  namespace: cattle-logging-system
spec:
  elasticsearch:
    buffer:
      timekey: 1m
      timekey_wait: 30s
      timekey_use_utc: true
    reconnect_on_error: true
    reload_on_failure: true
    reload_connections: false
    host: 172.16.1.166
    port: 9200
    scheme: http
    logstash_format: true
    logstash_prefix: kubernetes-event-tailer

---
apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
  name: rancher-event-tailer-flow
  namespace: cattle-logging-system
spec:
  filters:
  - tag_normaliser: 
  - parser:
      parse:
        type: json
  globalOutputRefs:
  - event-tailer-clusteroutput
  match:
  - select:
      labels:
        app.kubernetes.io/name: event-tailer
  • EventTailer:设置 Event 收集,会启动一个 rancher-event-tailer statefulset,内网部署需要修改镜像地址为内网仓库。默认镜像地址为banzaicloud/eventrouter:v0.1.0
  • ClusterOutput:定义日志发送到哪,这里配置的是 ElasticSearch,根据实际情况,修改 ElasticSearch 的地址,logstash_prefix 定义的是对应的 ElasticSearch 内的 index 名称,建议根据对应集群名称配置;
  • labels:关联的是 rancher-event-tailer 这个 statefulset 的 label。

节点 Kernel 日志收集

应用以下 Yaml 到集群中:

---
apiVersion: logging-extensions.banzaicloud.io/v1alpha1
kind: HostTailer
metadata:
  name: rancher-host-file-tailer
  namespace: cattle-logging-system
spec:
  fileTailers:
    - name: system-messages
      path: /var/log/messages
      buffer_max_size: 64k
      disabled: false
      skip_long_lines: "true"
      containerOverrides:
        image: www.wanshaoyuan.com/rancher/mirrored-fluent-fluent-bit:1.8.15
  workloadOverrides:
      tolerations:
      - effect: NoSchedule
        key: cattle.io/os
        operator: Equal
        value: linux
      - operator: Exists
---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: host-files-clusteroutput
  namespace: cattle-logging-system
spec:
  elasticsearch:
    buffer:
      timekey: 1m
      timekey_wait: 30s
      timekey_use_utc: true
    reconnect_on_error: true
    reload_on_failure: true
    reload_connections: false
    host: 172.16.1.166
    port: 9200
    scheme: http
    logstash_format: true
    logstash_prefix: cluster_os_logs

---
apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
  name: rancher-host-files-flow
  namespace: cattle-logging-system
spec:
  filters:
  - tag_normaliser: 
  - record_modifier:
      records:
      - host: $record.dig('kubernetes', 'host')
      whitelist_keys: host,message
  globalOutputRefs:
  - host-files-clusteroutput
  match:
  - select:
      labels:
        app.kubernetes.io/instance: rancher-host-file-tailer-host-tailer

在 ElasticSearch 中检查是否创建出对应的 index,并且检查全部 index:

curl http://172.16.1.166:9200/_cat/indices

yellow open k8s-components-2022.06.02             hg9OQTQEQsKLNwn3Kf_jdA 1 1   85231      0  32.4mb  32.4mb
yellow open cluster_os_logs-2022.06.02            zARda8N1R9OpZRX-cZIS1g 1 1    3666      0 738.9kb 738.9kb
yellow open k8s-application-2022.06.02            x0XxNvmmQQurdWDn4IL2gA 1 1     433      0 232.5kb 232.5kb
yellow open cluster1-auditlog-tailer-2022.06.02   qrAzHadxTeWQXF-E8B1VEQ 1 1 1686458      0 761.2mb 761.2mb
yellow open cluster1-runtimelog-tailer-2022.06.02 0DQp0at8TzOGSt911wnocw 1 1    1545      0 469.2kb 469.2kb
yellow open kubernetes-event-tailer-2022.06.02    L80_wp6iRQy2d0DGmiSxhA 1 1    1169      0   1.1mb   1.1mb

在 kibana 中查看 index 中日志信息:

总结

相比于 Rancher 2.6 之前的版本, Logging-operator 的引入大大增强了灵活性和功能性,可以非常灵活地配置各类参数和想收集的日志信息;但与之对应的是,使用门槛比 2.6 之前版本的有所提高。希望本篇文章可以帮助你加深对 Rancher Logging 的理解。

以上是关于rancher2.0快速入门的主要内容,如果未能解决你的问题,请参考以下文章

如何快速入门C++

EFK教程 - EFK快速入门指南

Python要如何快速入门?

Flume快速入门

Gojs 快速入门

Guzzle 的快速入门