Day 4 - 透过 RKE 架设第一套 Rancher(上)

本文将於赛後同步刊登於笔者部落格

有兴趣学习更多 Kubernetes/DevOps/Linux 相关的资源的读者,欢迎前往阅读

更多相关科技的技术分享,欢迎追踪 矽谷牛的耕田笔记

对於 Kubernetes 与 Linux Network 有兴趣的可以参阅笔者的线上课程

前言

本篇文章将会示范如何使用 Rke + Helm 来搭建一个基於 RKE 丛集的 Rancher 服务。
该 RKE 丛集会有三个节点,因此环境方面就会准备三台 VM,这三台 VM 前面就会架设一个 Load-Balancer 来帮忙将流量导向後方服务。
同时也会准备一个 rancher.hwchiu.com 的 DNS 纪录,这样之後存取时会更为简单与方便。

环境准备

接下来的环境都会基於 Azure 云端环境来使用,包含了 VMs 与 LoadBalancer 的设定
本文章不会探讨 Azure 云端该如何使用,事实上读者可以使用任意的公有云服务,甚至是地端机器都可。
下述为相关的软件版本资讯

  • VM: Azure VM
  • OS: Ubuntu 20.04.2 LTS
  • Rke: v1.2.11

整个架构如图下

Imgur

整个环境的概念如下

  1. 准备三个 VM,这些 VM 本身都没有任何 Public IP,同时这三个 VM 会作为 RKE 丛集里面的节点。
  2. 准备一个 Load-Balancer,该 Load-Balancer 未来会将流量都导向前述三个 VM,包含 Rancher UI/API 等相关流量
  3. 为了方便安装 RKE 到前述三个节点,会额外准备一个 management server,该服务器可以透过 ssh 存取前述三台 VM
  4. 我们会於 Management server 上透过 RKE 指令来安装 RKE 丛集。

建置 Rancher

整个安装步骤会分成下列步骤,如

  1. 环境检查并且於 Management server 下载安装 rke 指令
  2. 於 Management server 透过 rke 指令来安装 rke 丛集到 Server{1,2,3}
  3. 透过 Helm 将 Rancher 安装到该 RKE 丛集中
  4. 尝试透过浏览器存取 Rancher 服务

环境检查并且於 Server1 下载安装 rke

这个步骤一开始我准备了下列环境

  1. Management Server 以及 Server{1,2,3}
    • Management Server 能够透过 ssh 存取 server{1,2,3}
  2. LoadBalancer
    • backend pool 设定 server{1,2,3}
    • 转发 80/443
  3. Domain Name (rancher.hwchiu.com)
    • 该 domain name 指向该 LoadBalancer 的 public IP。

透过 SSH 登入到 Management Server 之後,我们要来安装 rke 这个指令。
官方 Github 上面有针对不同平台的安装档案,我的环境需要使用的 rke_linux-amd64

wget https://github.com/rancher/rke/releases/download/v1.2.11/rke_linux-amd64
sudo install -m755 rke_linux-amd64 /usr/local/bin/rke

安装完毕後可以直接尝试使用看看 rke 这个指令

azureuser@server1:~$ rke
NAME:
   rke - Rancher Kubernetes Engine, an extremely simple, lightning fast Kubernetes installer that works everywhere

USAGE:
   rke [global options] command [command options] [arguments...]

VERSION:
   v1.2.11

AUTHOR:
   Rancher Labs, Inc.

COMMANDS:
     up       Bring the cluster up
     remove   Teardown the cluster and clean cluster nodes
     version  Show cluster Kubernetes version
     config   Setup cluster configuration
     etcd     etcd snapshot save/restore operations in k8s cluster
     cert     Certificates management for RKE cluster
     encrypt  Manage cluster encryption provider keys
     util     Various utilities to retrieve cluster related files and troubleshoot
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d    Debug logging
   --quiet, -q    Quiet mode, disables logging and only critical output will be printed
   --trace        Trace logging
   --help, -h     show help
   --version, -v  print the version

同时确认该 management server 可以使用 ssh 连结到上述 Server{1,2,3}

azureuser@rke-management:~$ ssh 10.0.0.10 "hostname"
rke-serve000004
azureuser@rke-management:~$ ssh 10.0.0.8 "hostname"
rke-serve000002
azureuser@rke-management:~$ ssh 10.0.0.7 "hostname"
rke-serve000001

接者也要确认上述 server{1,2,3} 都安装好 docker 并且当前非 root 使用者可以执行,因为 rke 会需要透过 docker 去创建基本服务。

azureuser@rke-management:~$ ssh 10.0.0.7 "docker ps "
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
azureuser@rke-management:~$ ssh 10.0.0.8 "docker ps "
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
azureuser@rke-management:~$ ssh 10.0.0.10 "docker ps "
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

透过 rke 於 Server1 安装 rke 丛集

接下来使用 rke 的指令来创建 rke 创建丛集,首先要让 rke 指令知道我们有三台服务器,同时这些服务器要登入的 IP/SSH Uername 以及相关的 k8s 角色,我们需要准备一个 cluster.yaml 作为设定档案。

首先透过 rke 指令确认当前支援的 kubernetes 版本

azureuser@rke-management:~$ rke config --list-version --all
v1.17.17-rancher2-3
v1.19.13-rancher1-1
v1.18.20-rancher1-2
v1.20.9-rancher1-1

当前支援最高的版本是 v1.20.9-rancher1-1,所以准备一个下列的 cluster.yaml,其描述了

  1. 三台服务器的 IP 以及 ssh 角色名称
  2. 每个角色都要扮演 k8s controlplane, k8s worker 以及 etcd.
  3. network 使用 calico 作为 CNI
  4. 启动 etcd 并且启动自动备份
cluster_name: ithome-rancher
kubernetes_version: "v1.20.9-rancher1-1"
nodes:
  - address: 10.0.0.7
    user: azureuser
    role: [controlplane,worker,etcd]
  - address: 10.0.0.8
    user: azureuser
    role: [controlplane,worker,etcd]
  - address: 10.0.0.10
    user: azureuser
    role: [controlplane,worker,etcd]
services:
  etcd:
    backup_config:
      enabled: true
      interval_hours: 6
      retention: 60
network:
  plugin: flannel

准备好上述档案後,透过 rke up 来创建 cluster

azureuser@rke-management:~$ rke up --config cluster.yaml
INFO[0000] Running RKE version: v1.2.11
INFO[0000] Initiating Kubernetes cluster
INFO[0000] [certificates] GenerateServingCertificate is disabled, checking if there are unused kubelet certificates
INFO[0000] [certificates] Generating admin certificates and kubeconfig
INFO[0000] Successfully Deployed state file at [./cluster.rkestate]
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [10.0.0.8]
INFO[0000] [dialer] Setup tunnel for host [10.0.0.10]
INFO[0000] [dialer] Setup tunnel for host [10.0.0.7]
INFO[0000] [network] Deploying port listener containers
INFO[0000] Pulling image [rancher/rke-tools:v0.1.77] on host [10.0.0.7], try #1
INFO[0000] Pulling image [rancher/rke-tools:v0.1.77] on host [10.0.0.8], try #1
INFO[0000] Pulling image [rancher/rke-tools:v0.1.77] on host [10.0.0.10], try #1
....
INFO[0284] [dns] DNS provider coredns deployed successfully
INFO[0284] [addons] Setting up Metrics Server
INFO[0284] [addons] Saving ConfigMap for addon rke-metrics-addon to Kubernetes
INFO[0284] [addons] Successfully saved ConfigMap for addon rke-metrics-addon to Kubernetes
INFO[0284] [addons] Executing deploy job rke-metrics-addon
INFO[0301] [addons] Metrics Server deployed successfully
INFO[0301] [ingress] Setting up nginx ingress controller
INFO[0301] [addons] Saving ConfigMap for addon rke-ingress-controller to Kubernetes
INFO[0301] [addons] Successfully saved ConfigMap for addon rke-ingress-controller to Kubernetes
INFO[0301] [addons] Executing deploy job rke-ingress-controller
INFO[0306] [ingress] ingress controller nginx deployed successfully
INFO[0306] [addons] Setting up user addons
INFO[0306] [addons] no user addons defined
INFO[0306] Finished building Kubernetes cluster successfully

RKE已经正式创建完毕,当前目录下会产生一个 KUBECONFIG 的目录,档案名称为 "kube_config_cluster.yaml"

azureuser@rke-management:~$ mkdir .kube
azureuser@rke-management:~$ install -m400 kube_config_cluster.yaml ~/.kube/config
azureuser@rke-management:~$ kubectl get nodes
azureuser@rke-management:~$ sudo chmod 400 .kube/config
azureuser@rke-management:~$ kubectl get nodes
NAME        STATUS   ROLES                      AGE   VERSION
10.0.0.10   Ready    controlplane,etcd,worker   10m   v1.20.9
10.0.0.7    Ready    controlplane,etcd,worker   10m   v1.20.9
10.0.0.8    Ready    controlplane,etcd,worker   10m   v1.20.9
azureuser@rke-management:~$ kubectl get pods -A
NAMESPACE       NAME                                       READY   STATUS      RESTARTS   AGE
ingress-nginx   default-http-backend-6977475d9b-xrmv9      1/1     Running     0          9m34s
ingress-nginx   nginx-ingress-controller-bl7p9             1/1     Running     0          9m34s
ingress-nginx   nginx-ingress-controller-g476g             1/1     Running     0          9m34s
ingress-nginx   nginx-ingress-controller-nqlqv             1/1     Running     0          9m34s
kube-system     calico-kube-controllers-7ddcfb748f-tvnkp   1/1     Running     0          10m
kube-system     calico-node-f42dt                          1/1     Running     0          10m
kube-system     calico-node-gsn8f                          1/1     Running     0          10m
kube-system     calico-node-p98tx                          1/1     Running     0          10m
kube-system     coredns-55b58f978-7j85f                    1/1     Running     0          9m36s
kube-system     coredns-55b58f978-l4smb                    1/1     Running     0          10m
kube-system     coredns-autoscaler-76f8869cc9-t2s6f        1/1     Running     0          9m58s
kube-system     metrics-server-55fdd84cd4-m96ql            1/1     Running     0          9m43s
kube-system     rke-coredns-addon-deploy-job-7l8zs         0/1     Completed   0          10m
kube-system     rke-ingress-controller-deploy-job-pjvns    0/1     Completed   0          9m36s
kube-system     rke-metrics-addon-deploy-job-ddct7         0/1     Completed   0          9m55s
kube-system     rke-network-plugin-deploy-job-gprzz        0/1     Completed   0          10m

到这个环节,我们已经正式的将 RKE 丛集给创建完毕了,下一章节我们就要来透过 Helm 的方式将 Rancher 给安装到该 RKE 中。


<<:  Day 04-Terraform 也有 Backend?啥是 Terraform Backend 能吃吗?

>>:  【Day2】应用上大致的规划

【图解GCP教学・Big Query】5大使用诱因 & 完整架构入门介绍

Youtube连结:https://bit.ly/3zoWgOx GCP BigQuery 提供我...

官方介绍的Bluetooth

https://developer.android.com/guide/topics/connect...

【Day 5】逻辑时间与广播

分散式系统之间不只是 unicast,更多的是有 multicast 的需求, 因此这章将介绍广播。...

AI ninja project [day 13] 回归

这应该也是学习深度学习时的基础课程, 不确定跟图像分类比,哪一个会先学到, 但是在接触深度学习框架时...

使用 Domain Driven Design 来进行架构设计

接续上一篇的故事,阿明跟小美又经过了几次的对话与讨论,在便利贴专案中整理归纳了下列这几个关键字: C...