• Rancher 2.x 搭建及管理 Kubernetes 集群


    文章目录
    1、Rancher 2.x 介绍
    1.1、Rancher 1.x VS Rancher 2.x
    1.2、Rancher 2.x 架构图
    2、环境、软件准备
    3、创建 RancherOS 启动 Rancher 2.x
    3.1、安装 Docker machine
    3.2、创建 RancherOS
    3.3、启动 Rancher 2.x
    4、Rancher 2.x UI 界面
    5、Rancher 2.x 管理现有 Kubernetes 集群
    6、Rancher 2.x 基于 RKE 搭建 Kubernetes 集群
    7、Rancher 部署服务
    1、Rancher 2.x 介绍
    Rancher 是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。Rancher可以轻松地管理各种环境的 Kubernetes,满足IT需求并为 DevOps 团队提供支持。Rancher 用户可以选择使用 Rancher Kubernetes Engine(RKE) 创建 K8s 集群,也可以使用 GKE,AKS 和 EKS 等云K8s 服务。Rancher 用户还可以导入和管理现有的 Kubernetes 集群。同时 Rancher UI 为 DevOps 工程师提供了一个直观的用户界面来管理他们的服务容器。

    每个团队都可以在他们选择的公共云或私有云上部署应用程序,Rancher 在 IT 和 DevOps 组织中扮演的角色如下:

    1.1、Rancher 1.x VS Rancher 2.x
    Rancher 1.x 版本是基于 Docker 以 Cattle 为调度引擎的容器管理平台。Rancher 2.x 版本基于Kubernetes 基础上重新设计,保留了 1.x 版本中的友好功能,同时提供了更多新的功能。

    内置 CI/CD 流水线
    告警和日志收集功能
    多集群管理功能
    集成 Rancher Kubernetes Engine (RKE)
    与各云 Kubernetes 服务(如 GKE、EKS、AKS) 集成
    1.2、Rancher 2.x 架构图
    下图描述了 Rancher 管理两个 Kubernetes 集群的 Rancher server: 一个由 RKE 创建,另一个由 GKE 创建。

    2、环境、软件准备
    本次演示环境,我是在虚拟机上安装 RancherOS 系统来执行操作,通过虚拟机完成 Kubernetes 集群的搭建,以下是安装的软件及版本:

    Oracle VirtualBox: 5.1.20 r114628 (Qt5.6.2)
    System: Linux 4.14.85
    RancherOS: v1.5.1
    docker: 18.06.1-ce
    docker-machine: 0.16.0
    minikube: v0.28.2
    kubernetes: v1.10.0
    Rancher v2.1.7
    注意:这里现有的 Kubernetes 集群使用 Minikube 来搭建,Minikube 启动的单节点 K8s Node 实例是需要运行在本机的 VM 虚拟机里面,所以需要提前安装好 VM,这里我选择 Oracle VirtualBox。同时本机需要安装好 Docker 环境,这里忽略 Docker、VirtualBox、Minikube 的安装过程。

    Rancher 2.x 运行对系统配置的最低要求为:
    系统要求:

    Ubuntu 16.04 (64-bit)
    Red Hat Enterprise Linux 7.5 (64-bit)
    RancherOS 1.4 (64-bit)
    内存要求:4 GB
    软件要求:Docker v1.12.6, 1.13.1, 17.03.2

    3、创建 RancherOS 启动 Rancher 2.x
    首先说明一下,启动 Rancher 2.x 不必要非得在 RancherOS 上,任何满足上边条件的主机均可。那么什么是 RancherOS 系统呢?Rancher 提供了 RancherOS 系统,该系统是生产中运行 Docker 的最小、最简单的办法,它只包含运行 Docker 所需的服务,所以 RancherOS 比大多数传统操作系统要小得多。它通过删除不必要的库和服务,对安全补丁和其他维护的要求也得到了降低。所以可以理解为一个包含了 Docker 服务的轻量级的 Linux 操作系统。这里我就使用 RancherOS 来启动 Rancher Server。

    3.1、安装 Docker machine
    我们可以使用 Docker Machine 来创建 RancherOS 实例,Docker Machine 是一个方便安装 Docker 服务到虚拟机的一个工具。安装很简单,执行以下命令即可。

    Linux 系统:

    $ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
      curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
      sudo install /tmp/docker-machine /usr/local/bin/docker-machine

    MacOS 系统:

    $ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
      curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
      chmod +x /usr/local/bin/docker-machine

    安装完毕后,执行 docker-machine -v 查看版本信息。

    $ docker-machine -v
    docker-machine version 0.16.0, build 702c267f  

    3.2、创建 RancherOS
    接下来,我们就可以使用 docker-machine 命令来加载 VM 虚拟机来创建 RancherOS 了,目前支持虚拟机类型有 VirtualBox、VMWare(VMWare VSphere, VMWare Fusion)、AWS,注意在创建前,请选择以上一种 VM 并安装到本地,这里我本机已安装 virtualbox 虚拟机了。

    $ docker-machine create -d virtualbox
            --virtualbox-boot2docker-url https://releases.rancher.com/os/latest/rancheros.iso
            --virtualbox-memory 3072
            rancher-machine        

    稍等一会,它会自动创建一个名称为 rancher-machine ,内存为 3072M,系统为 Linux 4.14.85 的虚拟机 RancherOS 系统。我们可以使用 docker-machine 命令来查看并操作它。

    # 查看创建的虚拟机列表
    $ docker-machine ls
    NAME              ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    rancher-machine   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.06.1-ce

    # 查看虚拟机 IP
    $ docker-machine ip rancher-machine
    192.168.99.101

    # 进入到 rancher-machine 虚拟机内
    $ docker-machine ssh rancher-machine
    [docker@rancher-machine ~]$ docker -v
    Docker version 18.06.1-ce, build e68fc7a

    RacherOS 系统内有两种 Docker 进程,一种就是常用的 Docker Daemon,也就是我们说的 Docker 容器,另一种就是 System Docker,这个是 RancherOS 运行系统服务的进程,例如:syslog、ntp、console 等系统服务。

    $ sudo system-docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    rancher/os                  v1.5.1              d63929d3b7e7        4 weeks ago         155MB
    rancher/os-logrotate        v1.5.1              75feef2a843e        4 weeks ago         46.9MB
    rancher/os-syslog           v1.5.1              4fd39422c03a        4 weeks ago         46.9MB
    rancher/os-console          v1.5.1              533f86f2ce17        4 weeks ago         46.9MB
    rancher/os-acpid            v1.5.1              513cc99c250c        4 weeks ago         46.9MB
    rancher/os-base             v1.5.1              6aec1b999629        4 weeks ago         46.9MB
    rancher/os-docker           18.06.1-1           5097564f0920        5 weeks ago         148MB
    rancher/container-crontab   v0.4.0              7a2485d285d9        14 months ago       12.9MB

    $ sudo system-docker ps
    CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS               NAMES
    9bf9855e2132        rancher/os-console:v1.5.1          "/usr/bin/ros entr..."   1 days ago          Up 1 days                               console
    89e69b66af05        rancher/os-docker:18.06.1-1        "ros user-docker"        1 days ago          Up 1 days                               docker
    764787b89066        rancher/os-base:v1.5.1             "/usr/bin/ros entr..."   1 days ago          Up 1 hours                              ntp
    c6c6520de701        rancher/os-base:v1.5.1             "/usr/bin/ros entr..."   1 days ago          Up 1 days                               network
    96a22ba5b10c        rancher/os-base:v1.5.1             "/usr/bin/ros entr..."   1 days ago          Up 1 days                               udev
    4226d2939e7e        rancher/container-crontab:v0.4.0   "container-crontab"      1 days ago          Up 1 days                               system-cron
    34aaaeec7b00        rancher/os-acpid:v1.5.1            "/usr/bin/ros entr..."   1 days ago          Up 1 days                               acpid
    87d675f308eb        rancher/os-syslog:v1.5.1           "/usr/bin/entrypoi..."   1 days ago          Up 1 days                               syslog

    3.3、启动 Rancher 2.x
    现在,我们可以非常简单的在 RancherOS 上搭建 Rancher Server,只需要登录到系统内,执行 docker run 命令即可,是不是很方便。

    $ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
    1
    注意:以上命令启动 Rancher,删除容器后在启动的话, Rancher 之前配置都会失效,所以建议挂载主机目录到容器内 /var/lib/rancher 目录,这样能保存之前配置及数据,增加 -v <主机路径>:/var/lib/rancher/ 配置。稍等片刻,容器就启动成功了。

    4、Rancher 2.x UI 界面
    Rancher 提供了一个非常直观的 UI 界面,通过 UI 可以很方便的查看并操作 Kubernetes 集群。浏览器访问 https://<server_ip> 即可打开主页啦!server_ip 替换为运行 Rancher 容器主机的 IP,如果在本机启动,那么直接访问 https://127.0.0.1 即可,这里我访问 https://192.168.99.101 为 RancherOS 系统 IP。


    注意:第一次登录 Rancher 系统会要求设置管理员密码,默认管理员账号为: admin。设置完毕后,要设置一下 Rancher Server URL,这个 URL 是 Agent 节点注册的地址,需要保证这个地址能够被其他主机访问的到,一般默认即可,例如我这个 Rancher Server URL 为 https://192.168.99.101。

    5、Rancher 2.x 管理现有 Kubernetes 集群
    Rancher 可以管理现有 Kubernetes 集群,通过在现有 Kubernetes 集群中启动一个 Rancher Agent 服务,就可以托管整个 Kubernetes 集群,然后在 Rancher UI 中导入即可。这里我以导入本地 Minikube 搭建的 Kubernetes 为例,演示下如何在 Rancher UI 中操作。

    登录 Rancher UI 系统后,点击 “集群” -> “添加集群” -> “导入现有的Kubernetes集群”,输入集群名称和描述,点击 “创建” 到下一个页面。


    根据页面提示,在本地执行对应的命令,来添加 cattle-cluster-agent、cattle-node-agent 等资源,这些资源作为代理程序运行在 Kubernetes 集群中,来负责收集信息、处理请求、监控资源等等。

    然后,我本地执行一下如下命令即可。

    $ curl --insecure -sfL https://192.168.99.101/v3/import/hksfnzj582j4hkwgvbhd42hbn86q4k5dvrcg76ktnp2cnnf8qbsfdv.yaml | kubectl apply -f -
    namespace "cattle-system" created
    serviceaccount "cattle" created
    clusterrolebinding.rbac.authorization.k8s.io "cattle-admin-binding" created
    secret "cattle-credentials-6842057" created
    clusterrole.rbac.authorization.k8s.io "cattle-admin" created
    deployment.extensions "cattle-cluster-agent" created
    daemonset.extensions "cattle-node-agent" created

    $ kubectl get pods -n cattle-system
    NAME                                    READY     STATUS    RESTARTS   AGE
    cattle-cluster-agent-5bd8fc48dc-57k44   1/1       Running   0          7m
    cattle-node-agent-8g7zf                 1/1       Running   0          7m

    OK,代理程序启动之后,它会自动向 Rancher Server 发送请求,等到 API 准备就绪后,这样我们就可以在 UI 上边看到托管的 Kubernetes 资源了。


    现在,就可以在 Rancher UI 上很直观的查看和操作托管的 Kubernetes 集群资源了,包括添加命名空间、存储卷、告警、通知、日志、部署服务、负载均衡、服务发现、CI/CD 流水线等等功能,而且界面非常简洁直观,非常适合新手学习体验。

    这里我就暂时先不演示这些功能如何使用了,可以参照 Kubernetes in Rancher Doc 官方文档来体验尝试下。

    6、Rancher 2.x 基于 RKE 搭建 Kubernetes 集群
    上边演示了通过导入现有 Kubernetes 集群,来实现 UI 操作托管集群,Rancher 还可以通过 RKE 方式自动搭建 Kubernetes 集群。这里我就在上边创建的 RancherOS 系统内创建,点击 “集群” -> “添加集群” -> “添加主机自建Kubernetes集群”,输入集群名称和描述,编辑集群选项,点击 “下一步” 到下一个配置页面。


    注意:因为这里我只有一个主机节点,所以主机角色那里 etcd、Control、Worker 都需要勾选上,否则集群启动不起来,如果有多个节点,那么这里可以分别选择不同的角色来生成对应命令执行即可。复制最下边的命令到 RancherOS 系统内执行即可。

    $ docker-machine ssh rancher-machine
    $ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.1.7 --server https://192.168.99.101 --token hk47lchqxpdhl47kksxck49rhbfqldmpkh299ptplhmqgvcgdmjdsf --ca-checksum d57849795454b69b6a6c3047e51fccb2eb5c2b519c3ddcc5930a5b1833e90720 --node-name my-rancheros-k8s --etcd --controlplane --worker --label system=RancherOS
    301a5ff60a65791a631c4e8a761fa03ffbabfebb5b591155364a8d1ffadca65f

    这里需要稍等片刻,RKE 会自动下载依赖的镜像(这里镜像都是 rancher 官方提供,不需要翻墙了哈!),来创建并启动 Kubernetes 集群,启动完毕后,它也会自动向 Rancher Server 发送请求,等到 API 准备就绪后,这样我们就可以在 UI 上边看到托管的 Kubernetes 资源了。

    7、Rancher 部署服务
    最后,我在演示下,如何通过 Rancher UI 来一键式部署服务。Rancher Server 中存在一个项目的概念,默认存在两个项目:default 和 system,类似于 namespaces 但是并不是 namespaces,而且 namespaces 还率属于某项目下,项目可以配置 Pod 安全策略以及资源配额,可以理解为更好的划分各个项目资源隔离。default 项目可以理解为非系统项目的个人自定义项目,system 项目可以理解为具有所有 Kubernetes 和 Rancher 系统命名空间的系统项目,


    接下来我们切换到集群 my-rancheros 下 default 命令空间下的工作负荷页面来部署一个服务。

    我们以 nginx 为例,在新的 my-namespaces 命名空间内,启动一个新的 nginx Pod,并配置容器 80 端口映射到 NodePort 30001 端口来配置 Service,其他配置默认即可。

    点击完成,稍等片刻,Rancher Server 就自动在 my-rancheros Kubernetes 系统内创建了 my-nginx Pod 资源。

    接下来,我们就可以在本地访问 http://192.168.99.101:30001 地址来访问刚启动的 nginx 服务了。

    妥妥没问题,是不是很方便啦!之前我们是需要使用 kubectl 命令或者手写 yaml 文件来配置,现在只需要在 UI 页面上就可以完成了。当然 Rancher Server 底层还是将配置的参数转换成 yaml 文件方式,通过页面上也可以看到生成的 yaml 文件,例如上边 my-nginx 服务自动生成的 yaml 文件如下:

    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: "1"
        field.cattle.io/creatorId: user-j7rjg
        field.cattle.io/publicEndpoints: '[{"addresses":["10.0.2.15"],"port":30001,"protocol":"TCP","serviceName":"my-namespaces:my-nginx-nodeport","allNodes":true}]'
      creationTimestamp: "2019-03-15T05:14:01Z"
      generation: 2
      labels:
        cattle.io/creator: norman
        workload.user.cattle.io/workloadselector: deployment-my-namespaces-my-nginx
      name: my-nginx
      namespace: my-namespaces
      resourceVersion: "7513"
      selfLink: /apis/apps/v1beta2/namespaces/my-namespaces/deployments/my-nginx
      uid: 254de6d5-46e1-11e9-9cfd-02422b02c6d1
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          workload.user.cattle.io/workloadselector: deployment-my-namespaces-my-nginx
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
        type: RollingUpdate
      template:
        metadata:
          annotations:
            cattle.io/timestamp: "2019-03-15T06:24:33Z"
            field.cattle.io/ports: '[[{"containerPort":80,"dnsName":"my-nginx-nodeport","kind":"NodePort","name":"80tcp300011","protocol":"TCP","sourcePort":30001}]]'
          creationTimestamp: null
          labels:
            workload.user.cattle.io/workloadselector: deployment-my-namespaces-my-nginx
        spec:
          containers:
          - image: nginx:latest
            imagePullPolicy: Always
            name: my-nginx
            ports:
            - containerPort: 80
              name: 80tcp300011
              protocol: TCP
            resources: {}
            securityContext:
              allowPrivilegeEscalation: false
              capabilities: {}
              privileged: false
              procMount: Default
              readOnlyRootFilesystem: false
              runAsNonRoot: false
            stdin: true
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            tty: true
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    status:
      availableReplicas: 1
      conditions:
      - lastTransitionTime: "2019-03-15T05:14:08Z"
        lastUpdateTime: "2019-03-15T05:14:08Z"
        message: Deployment has minimum availability.
        reason: MinimumReplicasAvailable
        status: "True"
        type: Available
      - lastTransitionTime: "2019-03-15T05:14:01Z"
        lastUpdateTime: "2019-03-15T05:14:08Z"
        message: ReplicaSet "my-nginx-f448f8c6d" has successfully progressed.
        reason: NewReplicaSetAvailable
        status: "True"
        type: Progressing
      observedGeneration: 2
      readyReplicas: 1
      replicas: 1
      updatedReplicas: 1

    同时,我们可以看到,它自动为生成了两个相关的 Service,一个为 ClusterIP 服务类型的 my-nginx 服务,一个为 NodePort 服务类型的 my-nginx-nodeport 服务,上边我们访问的 http://192.168.99.101:30001 就是第二种方式暴漏的服务,第一种可以在集群内其他 Pod 来访问。

    当然 Rancher 还有很多实用的功能,像负载均衡、数据卷、流水线等,这里我就不在演示了,自己去体验一下吧。下一篇,我将继续演示如何通过 Rancher UI 来部署服务并配置负载均衡来外部访问。

    参考资料

    Github Rancher
    Rancher 2.x Docs
     

  • 相关阅读:
    数据结构8.4_动态存储管理之伙伴系统
    http code码实验
    php问题
    对称加密和非对称加密
    公钥与私钥,HTTPS详解
    数字证书原理,公钥私钥加密原理
    简明 Nginx Location Url 配置笔记
    HTTP状态码精简版
    给你掰扯清楚什么是正向代理,什么是反向代理
    关键字
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317345.html
Copyright © 2020-2023  润新知