服务器准备:三台虚拟机(master:1,node:2;这里选用的阿里云ECS)

OS

hostname

内网IP
Centos7joker-master-1172.27.31.149
Centos7joker-node-1172.27.31.148
Centos7joker-node-2172.27.31.147

首先所有节点初始化系统相关配置

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 修改 hosts 配置(可以只修改 master,或者所有节点)
cat >> /etc/hosts << EOF
172.27.31.149 joker-master-1
172.27.31.148 joker-node-1
172.27.31.147 joker-node-2
EOF

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

# 时间同步
yum install -y ntpdate 
ntpdate time.windows.com

所有节点安装docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce-18.06.1.ce-3.el7

systemctl enable docker && systemctl start docker

# 配置 docker 镜像加速
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["you docker mirror acceleration address"]
}
EOF

所有节点安装 Kubctl


# 配置阿里云 Kubernetes yum 软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubectl-1.20.15

所有节点 SSH Server 配置

vim /etc/ssh/sshd_config

# 允许 TCP 转发
AllowTcpForwarding yes

# 重启 sshd 服务
systemctl restart sshd.service

所有节点开放端口KubeAPI:6443 和etcd:2379

为所有节点创建用户,并设置 ssh 免密登录

1.创建用户

# 创建用户: rke
useradd rke

# 设置用户密码
passwd rke

# 将用户添加到 docker 组中
usermod -aG docker rke

# 登录新创建的用户 rke,测试 docker 权限
su rke
docker ps
# 出现下面这段代码说明配置成功
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

2. 配置 ssh 免密登录(使用新创建的用户进行配置

# 生成 ssh 秘钥
ssh-keygen -t rsa

# 配置免密登录
ssh-copy-id rke@172.27.31.149
ssh-copy-id rke@172.27.31.148
ssh-copy-id rke@172.27.31.147

登录验证

 安装 RKE 二进制包

wget https://github.com/rancher/rke/releases/download/v1.3.7/rke_linux-amd64
# 将下载好的 rke 二进制包移动到 /usr/bin 目录下,并赋予权限

# 如果当前登录用户非 root 帐号,切换到 root
su root

# 移动 rke 二进制包
mv rke_linux-amd64 /usr/bin/rke

# 文件授权
chmod +x /usr/bin/rke

验证版本

rke --version

 

K8S部署文件有两种生成方式(使用创建的用户操作

1.使用rke生成配置文件

rke config --name cluster.yml

[+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]: # ssh 秘钥保存路径
[+] Number of Hosts [1]: # 配置主机数
[+] SSH Address of host (1) [none]: # 第一台主机 SSH 地址
[+] SSH Port of host (1) [22]: # 第一台主机 SSH 端口号
[+] SSH Private Key Path of host (139.196.77.13) [none]: /home/rke/.ssh/id_rsa # 第一台主机 SSH 秘钥路径
[+] SSH User of host (139.196.77.13) [ubuntu]: rke # 第一台主机用户(就是我们上面创建的用户)
[+] Is host (139.196.77.13) a Control Plane host (y/n)? [y]: y # 参考 Rancher 官方文档
[+] Is host (139.196.77.13) a Worker host (y/n)? [n]: y # 参考 Rancher 官方文档
[+] Is host (139.196.77.13) an etcd host (y/n)? [n]: y # 参考 Rancher 官方文档
[+] Override Hostname of host (139.196.77.13) [none]: joker-master-1 # 第一台主机 hostname
[+] Internal IP of host (139.196.77.13) [none]: 172.27.31.149 # 第一台主机内网地址
[+] Docker socket path on host (139.196.77.13) [/var/run/docker.sock]: 
[+] SSH Address of host (2) [none]: # 第二台主机 SSH 地址
[+] SSH Port of host (2) [22]: 
[+] SSH Private Key Path of host (106.14.156.233) [none]: /home/rke/.ssh/id_rsa
[+] SSH User of host (106.14.156.233) [ubuntu]: rke
[+] Is host (106.14.156.233) a Control Plane host (y/n)? [y]: n
[+] Is host (106.14.156.233) a Worker host (y/n)? [n]: y
[+] Is host (106.14.156.233) an etcd host (y/n)? [n]: y
[+] Override Hostname of host (106.14.156.233) [none]: joker-node-1
[+] Internal IP of host (106.14.156.233) [none]: 172.27.31.148
[+] Docker socket path on host (106.14.156.233) [/var/run/docker.sock]: 
[+] SSH Address of host (3) [none]: # 第三台主机 SSH 地址
[+] SSH Port of host (3) [22]: 
[+] SSH Private Key Path of host (106.14.199.170) [none]: /home/rke/.ssh/id_rsa
[+] SSH User of host (106.14.199.170) [ubuntu]: rke
[+] Is host (106.14.199.170) a Control Plane host (y/n)? [y]: n
[+] Is host (106.14.199.170) a Worker host (y/n)? [n]: y
[+] Is host (106.14.199.170) an etcd host (y/n)? [n]: y
[+] Override Hostname of host (106.14.199.170) [none]: joker-node-2
[+] Internal IP of host (106.14.199.170) [none]: 172.27.31.147
[+] Docker socket path on host (106.14.199.170) [/var/run/docker.sock]: 
[+] Network Plugin Type (flannel, calico, weave, canal, aci) [canal]: flannel # 网络组件
[+] Authentication Strategy [x509]: 
[+] Authorization Mode (rbac, none) [rbac]: 
[+] Kubernetes Docker image [rancher/hyperkube:v1.22.6-rancher1]: rancher/hyperkube:v1.20.15-rancher1 # k8s 镜像版本,参考 RKE 官方文档
[+] Cluster domain [cluster.local]:
[+] Service Cluster IP Range [10.43.0.0/16]: 
[+] Enable PodSecurityPolicy [n]: 
[+] Cluster Network CIDR [10.42.0.0/16]: 
[+] Cluster DNS Service IP [10.43.0.10]: 
[+] Add addon manifest URLs or YAML files [no]:

这样就会在当前文件夹下生成一个 cluster.yml 文件

2. 手动编写一个 cluster.yml 文件,参考文档:Kubernetes 配置选项 | Rancher文档

安装部署 K8S 集群

rke up --config cluster.yml

这个要耐心等待一会儿。因为需要下载许多镜像。

如果出现如下错误

说明所有服务器之间 SSH 免密登录没有配置好。如果 SSH 免密登录没有问题,则检查 cluster.yml 文件中每个 node 下的 user 配置是否有问题。

 当出现如下信息,则证明集群已部署完成。

安装结束后,会生成两份文件 

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

使用 kube_config_cluster.yml文件查看集群状态

 至此,K8S集群就已经搭建完成。

参考文档:使用 RKE 安装 Kubernetes | Rancher文档

部署 Rancher(可以使用root用户进行操作

1.安装 helm

# 下载 helm 二进制包
wget https://get.helm.sh/helm-v3.5.0-linux-amd64.tar.gz

# 解压
tar -zxvf helm-v3.5.0-linux-amd64.tar.gz

# 这一步需要 root 用户操作,否则可能会有权限不足的问题
mv linux-amd64/helm /usr/bin

2.为 Rancher 创建 Namespace

kubectl create namespace cattle-system

如果出现

 说明 kubectl 没有找到相关的配置。还记得上面生成的 kube_config_cluster.yml 文件么?你可以在命令中间添加 --kubeconfig 指定 kube_config_cluster.yml 文件路径来执行。

kubectl --kubeconfig /home/rke/kube_config_cluster.yml apply -f cert-manager.crds.yaml

也可以将 kube_config_cluster.yml 文件添加到系统变量中

echo export KUBECONFIG=/home/rke/kube_config_cluster.yml >> ~/.bash_profile

source ~/.bash_profile

 这样 kubectl 就不需要在指定 --kubeconfig 文件了

 3.选择 SSL 选项(这里选用 Rancher 生成的 TLS 证书,因此需要 cert-manager)

# 如果你手动安装了CRD,而不是在Helm安装命令中添加了`--set installCRDs=true`选项,你应该在升级Helm chart之前升级CRD资源。
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml

# 添加 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 \
  --create-namespace \
  --version v1.5.1

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

kubectl get pods --namespace cert-manager

NAME                                      READY   STATUS    RESTARTS   AGE
cert-manager-56b686b465-lh5gj             1/1     Running   0          65s
cert-manager-cainjector-75c94654d-6s7n4   1/1     Running   0          65s
cert-manager-webhook-d4fd4f479-rzxh4      1/1     Running   0          65s

4.通过 helm 安装 Rancher

helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org \
  --set replicas=3 \
  --version 2.5.12
  • namespace:命名空间
  • hostname:负载均衡器的 DNS 记录,你需要通过这个域名来访问 Rancher Server。
  • replicas:设置为 Rancher 部署所使用的副本数量。
  • version:Rancher 版本

等待 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 运行状态

kubectl -n cattle-system get deploy rancher

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
rancher   3/3     3            3           3m29s

至此,Rancher 部署也就完成了!

参考文档:高可用安装指南 | Rancher文档


接下来我们测试一下我们安装完成后的 Rancher。

因为我没有购买域名,所以我需要做如下操作:

1.首先修改服务器的 hosts 文件,添加映射关系

vim /etc/hosts

 本地电脑也要修改一下 hosts 文件,linux 系统同上操作,windows 系统,hosts 文件路径为 C:\Windows\System32\drivers\etc\hosts,添加同上的操作。

2.配置完成后,打开浏览器访问:rancher.my.org,由于第一次访问,需要重新设置密码

至此记录一下 K8S、Rancher 学习。感谢网上的众多大佬分享经验!

文档中所有内容,官网中均可找到!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐