RKE + Rancher2.5.8 + Kubernetes 1.20.6 + Docker

1 篇文章 0 订阅
1 篇文章 0 订阅

Rancher推荐架构

  1. RKE安装高可用K8S集群
  2. Helm安装Rancher
  3. Rancher添加下游集群
  4. Rancher部署应用

环境准备

角色IPhostname
Master192.168.6.161ubuntu-m1-161
Master192.168.6.162ubuntu-m2-162
Master192.168.6.163ubuntu-m3-163
NGINX192.168.6.31ubuntu-n1-31

RKE 安装 K8S

官方文档

名词解释

安装要求

1. 禁用woker节点swap

K8S中所有woker角色的节点

###永久禁用Swap

# 把根目录文件系统设为可读写

sudo mount -n -o remount,rw /

# 用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出

vi /etc/fstab


# 重新启动电脑,使用free -m查看分区状态

reboot

sudo free -m

2. 加载内核模块

所有节点

modprobe -a br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink udp_tunnel VETH VXLAN x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport xt_nat xt_recent xt_set xt_statistic xt_tcpudp

会有两个模块找不到,无影响

3. 修改sysctl配置

所有节点

vi /etc/sysctl.conf
## 加入如下
net.bridge.bridge-nf-call-iptables=1
## 重新加载配置
sysctl -p /etc/sysctl.conf

4. 防火墙

所有节点 或开放端口或完全禁用

# 禁用防火墙
ufw disable

5. 配置主机时间、时区、系统语言

所有节点

#修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#修改系统语言环境:
sudo echo 'LANG="C.UTF-8"' >> /etc/profile;source /etc/profile

6. (可选)启用 Cgroup

所有节点

vim /etc/default/grub

# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
...

sudo reboot

7.创建用户

所有节点

# 创建用户
sudo useradd -m -s /bin/bash -G adm rkeuser
# 给用户设置密码
sudo passwd rkeuser

# 将用户添加到docker用户组
# 如果机器上还没有安装docker 执行下面命令则会提示docker用户组不存在,可以先安装docker再执行下面命令。下面章节会介绍docker的安装
usermod -aG docker rkeuser

useradd:
-m 创建家目录
-s 默认shell(默认是/bin/sh,很难用)
-G 加入用户组,adm组默认是可以sudo的
passwd
只有执行过passwd修改过密码才可以通过ssh进行登录,useradd命令中的 -p 参数与这个效果并不相同

8. 修改hostname

所有节点

# 修改主机名
vim /etc/hostname

# 修改hosts IP映射
vim /etc/hosts

# /etc/hosts
127.0.0.1       localhost
192.168.6.161   ubuntu-m1-161
192.168.6.162   ubuntu-m2-162
192.168.6.163   ubuntu-m3-163
192.168.6.31    ubuntu-n1-31
192.168.6.32    ubuntu-n2-32
...

9. SSH互信

切换用户到rkeuser
在第一个节点m1上执行即可

# 切换到rkeuser
su - rkeuser

# 生成公钥-私钥对
ssh-keygen  -t rsa -C '123456'
# 将master节点的公钥复制到所有节点(包括自身)-使得新建的rkeuser用户可以免密登录所有节点
ssh-copy-id rkeuser@192.168.6.161
ssh-copy-id rkeuser@192.168.6.162
ssh-copy-id rkeuser@192.168.6.163
ssh-copy-id rkeuser@192.168.6.31

使用ssh命令登陆了其他节点,检查是否可以免密登录。此步骤很重要,SSH互信是搭建集群的基本条件。

ssh user@node
user@node:~> docker ps
CONTAINER ID        IMAGE       COMMAND             CREATED             STATUS              PORTS               NAMES
user@node:~>

软件要求

OpenSSH

所有节点
为了可以通过 SSH 访问每一个节点,RKE 要求每个节点上安装的是 OpenSSH 的版本是OpenSSH 7.0+
https://blog.csdn.net/future_ai/article/details/81701744


## 安装zlib库
sudo apt install -y build-essential libssl-dev zlib1g-dev
## 下载7.4安装包
wget "http://mirrors.evowise.com/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz"
## 解压
tar xfz openssh-7.4p1.tar.gz
cd openssh-7.4p1
## 生成Makefile文件
./configure
## 编译
make
## 安装
sudo make install
### 检查版本
sshd -V
OpenSSH_7.4p1, OpenSSL 1.0.1f 6 Jan 2014

OS

所有节点
Ubuntu 16.04.7 LTS (GNU/Linux 4.4.0-186-generic x86_64)

RKE 可以在大多数已安装 Docker 的 Linux 操作系统上运行。RKE 的开发和测试过程是在 Ubuntu 16.04 上完成的。然而,其他操作系统对 RKE 有限制或要求。

修改Ubuntu apt源

# 备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 查看系统版本代号
lsb_release -c

#Ubuntu 12.04 (LTS)代号为precise
#Ubuntu 14.04 (LTS)代号为trusty
#Ubuntu 15.04 代号为vivid
#Ubuntu 15.10 代号为wily
#Ubuntu 16.04 (LTS)代号为xenial
#Ubuntu 18.04 (LTS)代号为bionic

sudo vim /etc/apt/sources.list


deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
...

sudo apt-get update
sudo apt-get upgrade


https://blog.csdn.net/zhangjiahao14/article/details/80554616

安装Docker

所有节点
参照“其他必备软件”章节中的docker版本
使用Rancher提供的docker安装脚本
使用docker v20.10.6 脚本安装

sudo mkdir /opt/app
sudo wget https://releases.rancher.com/install-docker/20.10.sh
# 提升sh可执行权限
sudo chmod a+x 20.10.sh
#执行
./20.10.sh

#检查Docker版本号
docker version --format '{{.Server.Version}}'
docker ps -a
docker stop id
# 移除所有停止的docker进程
docker rm $(docker ps -a -q)

修改docker镜像仓库

vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://z34wtdhg.mirror.aliyuncs.com"
    ],
    "insecure-registries": [
        "harbor.httpshop.com",
        "bh-harbor.suixingpay.com"
    ],
    "storage-driver": "overlay2",
    "storage-opts": [
        "overlay2.override_kernel_check=true"
    ],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m",
        "max-file": "3"
    }
}

sudo systemctl restart docker



其他必备软件版本号

软件版本安装于兼容性是否必须备注
dockerv20.10.6所有节点全部安装
RKEv1.2.8在m1节点上安装部署
K8Sv1.20.6在m1节点上安装部署
kubectlv1.19.2在m1节点上安装部署
Helmv3.5.4在m1节点上安装部署
Rancherv2.5.8在m1节点上安装部署Images
- rancher/rancher:v2.5.8
- rancher/rancher-agent:v2.5.8
Tools
- CLI - v2.4.11
- RKE - v1.2.8
Kubernetes
- v1.20.6 (default)
- v1.19.10
- v1.18.18
- v1.17.17
RancherCLIv2.4.11rancher命令行工具

国内用户可访问 http://mirror.cnrancher.com/ 下载资源

端口要求

如果您使用的是外部防火墙,请确保在运行 RKE 的节点和创建集群的节点之间开放了 TCP/6443 端口
运行以下命令,使用 iptables 打开 TCP/6443 端口。

# Open TCP/6443 for all
iptables -A INPUT -p tcp --dport 6443 -j ACCEPT

# Open TCP/6443 for one specific IP
iptables -A INPUT -p tcp -s your_ip_here --dport 6443 -j ACCEPT

使用 firewalld 打开 TCP/6443 端口

运行以下命令,使用 firewlld 打开 TCP/6443 端口。

# Open TCP/6443 for all
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --reload

# Open TCP/6443 for one specific IP
firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="your_ip_here/32"
  port protocol="tcp" port="6443" accept'
firewall-cmd --reload

SSH Server 配置

您的 SSH server 全系统配置文件,位于/etc/ssh/sshd_config,该文件必须包含以下代码,允许 TCP 转发。

vi /etc/ssh/sshd_config
   
## 允许TCP转发
AllowTcpForwarding yes

安装RKE

m1节点

RKE 是一个快速的,多功能的 Kubernetes 安装工具,您可以参考以下步骤,使用 RKE 在您的 Linux 主机上安装 Kubernetes。

RKE 提供了三种下载安装包的方法:通过 GitHub、Homebrew 或 MacPorts 都可以下载 RKE 安装包。使用 Github 下载对您使用的主机操作系统没有要求,而使用 Homebrew 和 MacPorts 要求您的主机操作系统必须为 MacOS。

使用 GitHub 下载安装包

根据“其他必备软件版本号”章节获取兼容的RKE版本。下载rke_linux_amd64版本 v1.2.8

cd /opt/app
# 下载RKE二进制安装包
$  wget https://github.com/rancher/rke/releases/download/v1.2.8/rke_linux-amd64
# 提醒可执行权限
$ chmod +x rke_linux-amd64
mv rke_linux-amd64 /usr/local/bin/rke
# 确认RKE版本
$ rke --version

为K8S集群准备节点


创建cluster.yml文件,cluster.yml文件详解,参考K8S配置选项
主要根据自己的架构修改配置项,其中kubernetes_version是指k8s的版本号,需要访问RKE 版本说明 查找兼容的K8S版本。

K8S版本

# 创建空cluster.yml
rke config --empty --name cluster.yml
vim cluster.yml

nodes:
- address: 192.168.6.161
  port: "22"
  internal_address: 192.168.6.161
  role: [controlplane,worker,etcd]
  hostname_override: "ubuntu-m1-161"
  user: rke
  ssh_key_path: /home/rke/.ssh/id_rsa
  ssh_agent_auth: true
  labels: {}
  taints: []
- address: 192.168.6.162
  port: "22"
  internal_address: 192.168.6.162
  role: [controlplane,worker,etcd]
  hostname_override: "ubuntu-m2-162"
  user: rke
  ssh_key_path: /home/rke/.ssh/id_rsa
  ssh_agent_auth: true
  labels: {}
  taints: []
- address: 192.168.6.163
  port: "22"
  internal_address: 192.168.6.163
  role: [controlplane,worker,etcd]
  hostname_override: "ubuntu-m3-163"
  user: rke
  ssh_key_path: /home/rke/.ssh/id_rsa
  ssh_agent_auth: true
  labels: {}
  taints: []
kubernetes_version: "v1.20.6-rancher1-1"
cluster_name: "hello-k8s"
services:
  etcd:
    backup_config:
        enabled: true
        interval_hours: 6
        retention: 60


备注:
address 公共域名或IP地址
user 可以运行docker命令的用户
role 分配给节点的Kubernetes角色列表
internal_address 内部集群通信的私有域名或IP地址
开启了etcd的备份机制,每隔6小时备份一次,保存60天数据

使用RKE部署K8S集群

切换用户到rkeuser
在第一个节点m1上执行即可

# 开始部署K8S集群
rke up --config ./cluster.yml
#打印结果
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [10.0.0.1]
INFO[0000] [network] Deploying port listener containers
INFO[0000] [network] Pulling image [alpine:latest] on host [10.0.0.1]
...
INFO[0101] Finished building Kubernetes cluster successfully

运行该命令后,返回的最后一行信息应该是Finished building Kubernetes cluster successfully,表示成功部署集群,可以开始使用集群。在创建 Kubernetes 集群的过程中,会创建一个kubeconfig 文件,它的文件名称是 kube_config_cluster.yml,您可以使用它控制 Kubernetes 集群。

说明

如果您之前使用的集群配置文件名称不是cluster.yml,那么这里生成的 kube_config 文件的名称也会随之变化为kube_config*<FILE_NAME>.yml

保存文件

重要

请保存下文中列出来的所有文件,这些文件可以用于维护集群,排查问题和升级集群。
请将这些文件复制并保存到安全的位置:

  • cluster.yml:RKE 集群的配置文件。
  • kube_config_cluster.yml:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。
  • cluster.rkestateKubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。
说明

kube_config_cluster.ymlcluster.rkestate两个文件的名称取决于您如何命名 RKE 集群配置文件,如果您修改的集群配置文件的名称,那么后两个文件的名称可能会跟上面列出来的文件名称不一样。

Kubernetes 集群状态文件

Kubernetes 集群状态文件用集群配置文件cluster.yml以及集群中的组件证书组成。不同版本的 RKE 会将文件保存在不同的地方。
v0.2.0 以及更新版本的 RKE 会在保存集群配置文件 cluster.yml的路径下创建一个.rkestate文件。该文件包含当前集群的状态、RKE 配置信息和证书信息。请妥善保存该文件的副本。
v0.2.0 之前的版本的 RKE 会将集群状态存储以密文的形式存储。更新集群状态时,RKE 拉取这些密文,修改集群状态,然后将新的集群状态再次存储为密文。

操作 Kubernetes 集群

成功启动和运行集群后,您可以使用kubectlkubeconfig 文件控制集群。

安装Kubectl

切换用户rkeuser
在第一个节点m1上执行即可

提示

国内用户,可以导航到 http://mirror.cnrancher.com 下载所需资源。

cd /opt/app
# 下载最新版本的kubectl
sudo wget http://rancher-mirror.cnrancher.com/kubectl/v1.19.2/linux-amd64-v1.19.2-kubectl
# 配置全局访问
sudo mv linux-amd64-v1.19.2-kubectl /usr/local/bin/kubectl
# 提升权限
sudo chmod +x /usr/local/bin/kubectl
# 查看kubectl版本
sudo kubectl version --client

Helm安装Rancher

官方文档

安装Helm

在第一个节点m1上执行即可

Rancher 使用 Kubernetes 的 Helm 软件包管理器安装。Helm Charts 为 Kubernetes YAML 清单文档提供了模板语法。

注意

本安装指南假定您使用的是 Helm3。有关从 Helm 2 迁移到 Helm 3 的方法,请参阅官方的Helm 2 到 3 迁移文档。这个指南提供了使用 Helm 2 在 RKE Kubernetes 集群上安装 Rancher 的较旧的安装指南,适用于无法升级到 Helm 3 的情况。

cd /opt/app
# 下载Helm3
sudo wget http://rancher-mirror.cnrancher.com/helm/v3.5.4/helm-v3.5.4-linux-amd64.tar.gz
# 解压
sudo tar zxvf  helm-v3.5.4-linux-amd64.tar.gz -C /usr/src/
# 移动位置
sudo mv linux-amd64/helm /usr/local/bin/
#添加可执行权限
sudo chmod +x /usr/local/bin/helm
#检查版本
sudo helm version

添加 Helm Chart 仓库

使用helm repo add命令添加含有 Rancher Chart 的 Helm Chart 仓库。
请将命令中的<CHART_REPO>,替换为lateststablealpha。更多信息,请查看选择 Rancher 版本来选择最适合您的仓库。

  • latest: 建议在尝试新功能时使用。
  • stable: 建议在生产环境中使用。(推荐)
  • alpha: 未来版本的实验性预览。
sudo helm repo add rancher-<CHART_REPO> http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/<CHART_REPO>

为 Rancher 创建 Namespace

kubectl create namespace cattle-system

安装 cert-manager

# 安装 CustomResourceDefinition 资源

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

# **重要:**
# 如果您正在运行 Kubernetes v1.15 或更低版本,
# 则需要在上方的 kubectl apply 命令中添加`--validate=false`标志,
# 否则您将在 cert-manager 的 CustomResourceDefinition 资源中收到与
# x-kubernetes-preserve-unknown-fields 字段有关的验证错误。
# 这是一个良性错误,是由于 kubectl 执行资源验证的方式造成的。

# 为 cert-manager 创建命名空间

kubectl create namespace cert-manager

# 添加 Jetstack Helm 仓库

helm repo add jetstack https://charts.jetstack.io

# 更新本地 Helm chart 仓库缓存

helm repo update

# 安装 cert-manager Helm chart

helm install \
 cert-manager jetstack/cert-manager \
 --namespace cert-manager \
 --version v0.15.0

安装完 cert-manager 后,您可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:

kubectl get pods --namespace cert-manager

NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m

根据您选择的 SSL 选项,通过 Helm 安装 Rancher

使用 Let’s Encrypt 证书

在下面的命令中,

  • hostname 设置为公共 DNS 记录。
  • ingress.tls.source 选项设置为 letsEncrypt
  • letsEncrypt.email 设置为可通讯的电子邮件地址,方便发送通知(例如证书到期的通知)。
  • 如果您在安装 alpha 版本,需要把--devel 选项添加到下面到 Helm 命令中。
sudo helm install rancher rancher-latest/rancher \
 --namespace cattle-system \
 --set hostname=rancher.whale.com \
 --set ingress.tls.source=letsEncrypt \
 --set letsEncrypt.email=kleechn@gmail.com

等待 Rancher 运行:

kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out

验证 Rancher Server 是否已成功部署

检查 Rancher Server 是否运行成功:

kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out

如果看到以下错误: error: deployment "rancher" exceeded its progress deadline, 您可以通过运行以下命令来检查 deployment 的状态:

kubectl -n cattle-system get deploy rancher
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rancher 3 3 3 3 3m

DESIREDAVAILABLE应该显示相同的个数。

保存您的选项

请保存您使用的全部--set选项。使用 Helm 升级 Rancher 到新版本时,您将需要使用相同的选项。

访问Rancher-UI

通过访问 上面章节中配置的hostname 来访问Rancher可视化控制台。


参考资料

RKE中文文档
Rancher 2.5 中文文档
Rancher 2.4.3 - HA 部署高可用k8s集群:肖祥
ubuntu1604搭建Rancher步骤:wuli洛玖
rancher rke部署kubernetes集群:willblog
怎么使用rke安装k8s集群?这么清楚了,你还看不懂吗:程序员阿轩

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值