自动化部署-Rancher HA 高可用安装步骤

系统防火墙配置
禁用防火墙

systemctl disable firewalld

关闭防火墙

systemctl stop firewalld

禁用 SELinux,目的是让容器可以读取主机文件系统

setenforce 0

配置禁用 SELinux,修改 SELINUX 为 disabled
SELINUX=disabled

vi /etc/sysconfig/selinux

禁用当前的 swap

sudo swapoff -a 

同时永久禁掉swap分区,打开如下文件注释掉swap那一行

vi /etc/fstab

在这里插入图片描述

1. 必备工具

1.kubectl - Kubernetes命令行工具。
2.rke - Rancher Kubernetes Engine,cli用于构建Kubernetes集群。
3.helm - Kubernetes的包管理。

1.1 安装 kubectl
Debian / Ubuntu

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  
apt-get update
apt-get install -y kubectl

CentOS / RHEL / Fedora

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubectl

1.2 安装 rke
MacOS:rke_darwin-amd64
Linux(Intel / AMD):rke_linux-amd64
Linux(ARM 32位):rke_linux-arm
Linux(ARM 64位):rke_linux-arm64
Windows(32位):rke_windows-386.exe
Windows(64位):rke_windows-amd64.exe
将RKE二进制文件复制到您的文件夹中$PATH并重命名 rke(或 rke.exe 用于 Windows)。

$PATH

echo $PATH
# MacOS
$ mv rke_darwin-amd64 rke
# 增加可执行权限
$ chmod +x rke

# Linux
$ mv rke_linux-amd64 rke
# 增加可执行权限
$ chmod +x rke

# Windows PowerShell
> mv rke_windows-amd64.exe rke.exe

验证安装:

$ rke --version
# 输出类似下面版本信息
rke version v0.2.6

1.3 安装 Helm
MacOS amd64
Linux amd64
Linux arm
Linux arm64
Linux i386
Linux ppc64le
Linux s390x
Windows amd64
下载后解压(tar -zxvf helm-v2.0.0-linux-amd64.tgz),然后将 helm 程序放到 $PATH 中(mv linux-amd64/helm /usr/bin/helm)。

验证安装:

$ helm version
# 输出类似下面信息
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Error: Get http://localhost:8080/api/v1/namespaces/kube-system/pods?labelSelector=app%3Dhelm%2Cname%3Dtiller: dial tcp [::1]:8080: connect: connection refused

2.1 创建节点和负载均衡器

2.2 使用RKE安装Kubernetes
使用RKE安装高可用etcd配置的Kubernetes

2.2.1安装Docker CE
在阿里巴巴开源镜像站还可以搜 docker-ce,帮助中给了一个地址
阿里巴巴开源镜像docker-ce

systemctl enable docker
systemctl start docker
systemctl status docker

添加国内加速代理,设置storage-driver

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://kw88y6eh.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.112.69"],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ]
}
EOF

registry-mirrors:表示公网的加速器地址,可设置多个,地址需要添加协议头(https或者http)。
insecure-registries:表示内网的私服地址,地址不能添加协议头(http)。
storage-driver:表示使用OverlayFS的overlay2存储驱动。

重启docker

systemctl daemon-reload
systemctl restart docker

其他相关命令
启动docker

systemctl start docker

关闭docker

systemctl stop docker

查看docker的运行状态

systemctl status docker

查看docker镜像

docker images

删除docker镜像

docker rmi IMAGE ID

2.2.2重要提示!
如果你也使用的 RedHat/CentOS,在开篇已经提醒过,不能使用 root 账号,因此要添加专用的账号进行 docker 操作。
需要在每个节点重复该操作添加账号
创建 rancher 用户:

useradd rancher

添加到 docker 组:

usermod -aG docker rancher

设置密码

echo "123456" | passwd --stdin rancher

2.2.3配置 ssh_key 登录
-------------------------------------------第一种方法-------------------------------------------
ssh免密登录
在node1和node2服务器上均执行下面命令

su rancher
ssh-keygen
ssh-copy-id rancher@192.168.1.20
ssh-copy-id rancher@192.168.1.30

-------------------------------------------第一种方法-------------------------------------------

2.2.3配置 ssh_key 登录
-------------------------------------------第二种方法-------------------------------------------
假设分别为 NODE1, NODE2 2个节点。
分别在每个节点上执行下面的命令生成密钥(rancher账户)

$ ssh-keygen -t rsa
# 之后会有一些默认选项和可以手工配置的选项,可以自行配制,或者一直回车用默认值
# 执行完成后,会生成两个文件
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

查看 id_rsa.pub 文件,复制文件内容,将 3 个节点的文件集合到一起,在每个节点上,切换到 rancher 用户,然后执行下面的命令:

# 切换到前面创建的用户
$ su rancher
# 进入自己的 home 目录
$ cd ~
# 创建 .ssh 目录
$ mkdir .ssh
# 写入3个服务的公钥
$ echo "复制的内容" >> .ssh/authorized_keys
# 设置权限
$ chmod 700 .ssh
$ chmod 644 .ssh/authorized_keys

配置后可以在 NODE1 测试:(NODE1和NODE2可以互相登录对方)

$ ssh rancher@NODE2
# 连接成功后通过 exit 退出

-------------------------------------------第二种方法-------------------------------------------

2.2.4创建 rancher-cluster.yml 配置文件
参考下面的示例创建rancher-cluster.yml文件,替换 nodes 3个节点的配置信息。

nodes:
  - address: 192.168.1.20
    internal_address: 192.168.1.20
    user: rancher
    role: [controlplane,worker,etcd]
  - address: 192.168.1.30
    internal_address: 192.168.1.30
    user: rancher
    role: [worker]

services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24h

2.2.5运行 RKE
根据自己的配置修改保存好 rancher-cluster.yml 后,执行下面的命令:

rke up --config ./rancher-cluster.yml

在这里插入图片描述
2.2.6测试集群
集群创建成功后,在当前目录下面有以下文件:

-rw-r-----  1 root root     5382 Aug  1 16:17 kube_config_rancher-cluster.yml
-rw-r-----  1 root root   114422 Aug  1 16:18 rancher-cluster.rkestate
-rw-r--r--  1 root root      423 Aug  1 15:50 rancher-cluster.yml

将 kube_config_rancher-cluster.yml 复制到 $HOME/.kube,修改名称为config,如果想在其他节点通过 kubectl 访问集群,将该文件复制到其他节点的相同路径下。
$HOME

echo $HOME
mkdir .kube
cp kube_config_rancher-cluster.yml .kube/config

现在可以通过 kubectl 来查看当前的节点状态:

$ kubectl get nodes
NAME          STATUS   ROLES                      AGE   VERSION
10.10.1.238   Ready    controlplane,etcd,worker   16m   v1.14.3
10.10.1.241   Ready    controlplane,etcd,worker   16m   v1.14.3
10.10.1.242   Ready    controlplane,etcd,worker   16m   v1.14.3

检查集群 Pods 运行状况
检查所有必需的Pod和容器是否健康可以继续。

Pod处于Running或Completed状态。
READY列显示所有容器正在运行(如 3/3)的 Pod 状态是 Running
Pod 状态为Completed是一次运行的Job。这些Pod 的READY应该是0/1。

$ kubectl get pods --all-namespaces
NAMESPACE       NAME                                      READY   STATUS      RESTARTS   AGE
ingress-nginx   default-http-backend-5954bd5d8c-9c2cg     1/1     Running     0          19m
ingress-nginx   nginx-ingress-controller-6zvql            1/1     Running     0          19m
ingress-nginx   nginx-ingress-controller-7qjms            1/1     Running     0          19m
ingress-nginx   nginx-ingress-controller-8r2xs            1/1     Running     0          19m
kube-system     canal-mx6p6                               2/2     Running     0          19m
kube-system     canal-r7prj                               2/2     Running     0          19m
kube-system     canal-xddff                               2/2     Running     0          19m
kube-system     coredns-86bc4b7c96-gmzd6                  1/1     Running     0          19m
kube-system     coredns-autoscaler-5d5d49b8ff-rj8qj       1/1     Running     0          19m
kube-system     metrics-server-7f6bd4c888-mkshr           1/1     Running     0          19m
kube-system     rke-coredns-addon-deploy-job-9jqns        0/1     Completed   0          19m
kube-system     rke-ingress-controller-deploy-job-m8sjn   0/1     Completed   0          19m
kube-system     rke-metrics-addon-deploy-job-djslk        0/1     Completed   0          19m
kube-system     rke-network-plugin-deploy-job-jj887       0/1     Completed   0          19m

保存文件
重要信息
需要下面提到的文件来维护,排除故障并升级您的集群。

将以下文件的副本保存在安全位置:

rancher-cluster.yml:RKE集群配置文件。
kube_config_rancher-cluster.yml:集群的 Kube config文件,此文件包含完全访问集群的凭据。
rancher-cluster.rkestate:Kubernetes集群状态文件,此文件包含完全访问集群的凭据。
仅在使用RKE v0.2.0或更高版本时才会创建Kubernetes集群状态文件。

3.1初始化Helm(Tiller)
Helm是Kubernetes首选的包管理工具。Helm“chart”为Kubernetes YAML清单文档提供模板语法。使用Helm,我们可以创建可配置的部署,而不仅仅是使用静态文件。
在集群上安装Tiller
Helm tiller 在群集上安装服务以管理charts。由于RKE默认启用RBAC,因此我们需要使用kubectl创建serviceaccount 和 clusterrolebinding 让 tiller具有部署到集群的权限。
3.1.1在kube-system命名空间中创建ServiceAccount。

kubectl -n kube-system create serviceaccount tiller

3.1.2创建ClusterRoleBinding以授予tiller帐户对群集的访问权限。

kubectl create clusterrolebinding tiller \
  --clusterrole=cluster-admin \
  --serviceaccount=kube-system:tiller

3.1.3最后用helm安装tiller服务
这里特别提到中国。我们需要靠aliyun了。

# 查看版本号
helm version
# Client: &version.Version{SemVer:"v2.14.3", GitCommit:"...", GitTreeState:"clean"}
# 使用版本号替换下面命令的版本号
helm init --service-account tiller --skip-refresh \
   --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:v2.14.3

3.1.4查看 tiller 状态

kubectl get pods --all-namespaces
# 省略其他
NAMESPACE       NAME                                      READY   STATUS      RESTARTS   AGE
kube-system     tiller-deploy-7464dff9-7msvc              0/1     Running     0          18s

测试 Tiller
运行下面的命令验证:

kubectl -n kube-system  rollout status deploy/tiller-deploy

显示以下表示安装成功

deployment "tiller-deploy" successfully rolled out

运行以下命令以验证Helm是否可以与tiller服务进行通信:

helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}

3.2安装Rancher
3.2.1安装 cert-manager
使用常规清单安装
注意:从cert-manager v0.11.0开始,Kubernetes的最低支持版本是v1.12.0。仍在运行Kubernetes v1.11或更低版本的用户应在安装cert-manager之前升级到受支持的版本。
创建一个名称空间以在其中运行cert-manager

kubectl create namespace cert-manager

我们可以继续安装cert-manager。所有资源(CustomResourceDefinitions,cert-manager和webhook组件)都包含在单个YAML清单文件中:

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

查看 cert-manager rollout 状态:

kubectl -n kube-system rollout status deploy/cert-manager

显示以下表示安装成功

deployment "cert-manager" successfully rolled out

3.2.2安装rancher

添加Helm Chart Repository

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm repo add stable http://mirror.azure.cn/kubernetes/charts/

修改客户端的 hosts 配置映射
前两点修改很容易,修改 Windows 中的 C:\Windows\System32\drivers\etc\hosts 或者 Linux 中的 /etc/hosts,增加下面的映射:

# 负载均衡对应的实际IP 自定义域名
# 例如下面
192.168.1.20 rancher.my.org

详细请参照 安装 Rancher

helm install rancher-stable/rancher \
  --name rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值