miaoyun+Rancher+K8S学习与实践


04_Rancher 2.5.3-K8S(自签名证书)高可用集群HA部署-online instal

<p>下次安装,添加: 节点,Docker功能,k8s调优,可参见:<a href="https://docs.rancher.cn/docs/rancher2/best-practices/optimize/os/_index">https://docs.rancher.cn/docs/rancher2/best-practices/optimize/os/_index</a> 安装说明:这是Rancher v2.5.3版本的在线安装文档,证书采用rancher官方一键脚本生成SSL的自签名证书。</p> <h1>文章目录</h1> <pre><code>事先准备: 一、安装kubernetes 1、初始化环境 1.1、关闭相关服务 1.2、主机名设置 1.3、内核调优 1.4、创建用户并分发秘钥 1.5、安装docker 2、使用rke安装K8S集群(在第一台机器(rancher0)执行) 2.1、安装rke/kubectl/helm 2.2、创建rke文件 2.3、运行rke文件 4、测试集群 5、检查集群状态 6、保存配置文件 二、安装rancher 1、安装heml和kubectl 2、添加 Helm Chart 仓库 3、为 Rancher 创建 Namespace 4、选择证书 5、安装 cert-manager 6、根据选择的 SSL 选项,通过 Helm 安装 Rancher 7、验证 Rancher Server 是否已成功部署</code></pre> <hr /> <h1>事先准备</h1> <p>服务器规划 服务器使用本地的EXSI,虚拟机具体配置如下:</p> <table> <thead> <tr> <th>主机名称</th> <th>系统版本</th> <th>内网ip</th> <th>配置</th> <th>功能用途</th> </tr> </thead> <tbody> <tr> <td>rancher01</td> <td>CentOS 7.8</td> <td>172.16.7.201</td> <td>2C/8g/300G</td> <td>rancher01服务器</td> </tr> <tr> <td>rancher02</td> <td>CentOS 7.8</td> <td>172.16.7.202</td> <td>2C/8g/300G</td> <td>rancher02服务器</td> </tr> <tr> <td>rancher03</td> <td>CentOS 7.8</td> <td>172.16.7.203</td> <td>2C/8g/300G</td> <td>rancher03服务器</td> </tr> <tr> <td>rancher</td> <td>CentOS 7.8</td> <td>172.16.7.200</td> <td>1C/2g/300G</td> <td>负载均衡器</td> </tr> </tbody> </table> <h2>1. 负载均衡器</h2> <p>nginx,作为负载均衡使用。nginx需要有stream模块 <a href="https://www.showdoc.com.cn/963349270507135?page_id=5826127227251464" title="安装过程">nginx安装过程</a>略,可参考:<a href="https://www.showdoc.com.cn/963349270507135?page_id=5826127227251464">https://www.showdoc.com.cn/963349270507135?page_id=5826127227251464</a> nginx配置文件如下:</p> <pre><code class="language-bash">[root@rancher ~]# cat /etc/nginx/nginx.conf worker_processes 4; worker_rlimit_nofile 40000; events { worker_connections 8192; } stream { upstream rancher_servers_http { least_conn; server 172.16.7.201:80 max_fails=3 fail_timeout=5s; server 172.16.7.202:80 max_fails=3 fail_timeout=5s; server 172.16.7.203:80 max_fails=3 fail_timeout=5s; } server { listen 80; proxy_pass rancher_servers_http; } upstream rancher_servers_https { least_conn; server 172.16.7.201:443 max_fails=3 fail_timeout=5s; server 172.16.7.202:443 max_fails=3 fail_timeout=5s; server 172.16.7.203:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_servers_https; } }</code></pre> <h2>2. 各主机配置如下</h2> <pre><code class="language-bash">各主机配置如下: # 172.16.7.200 #负载均衡器 [root@worker-01 ~]# cat /etc/hosts 172.16.7.204 worker-01.techzsun.com 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.7.200 rancher.hzsun.com # 172.16.7.201 # rancher1 [rancher@rancher01 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.7.201 rancher-01.techzsun.com 172.16.7.202 rancher-02.techzsun.com 172.16.7.203 rancher-03.techzsun.com 172.16.7.200 rancher.hzsun.com # 172.16.7.202 # rancher2 [root@rancher02 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.7.201 rancher-01.techzsun.com 172.16.7.202 rancher-02.techzsun.com 172.16.7.203 rancher-03.techzsun.com 172.16.7.200 rancher.hzsun.com # 172.16.7.203 # rancher3 [root@rancher03 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.7.201 rancher-01.techzsun.com 172.16.7.202 rancher-02.techzsun.com 172.16.7.203 rancher-03.techzsun.com 172.16.7.200 rancher.hzsun.com</code></pre> <pre><code class="language-bash"># 172.16.7.204 # worker1 [root@worker-01 ~]# cat /etc/hosts 172.16.7.204 worker-01.techzsun.com 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.7.200 rancher.hzsun.com</code></pre> <p>worker-02,worker-03与worker-01 相同。 <code>????三台worker主机的/etc/hosts是否也需要添加另外两台机子的IP 与 主机名 对应关系进来。?????如果局域网内没有DNS服务器,是需要,但目前安排时都未添加,也能正常安装成功,后续使用时再关注此项。</code></p> <h1>一、安装kubernets</h1> <h2>1、初始化环境</h2> <h3>1.1、关闭相关服务</h3> <pre><code class="language-bash"># 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭swap swapoff -a &amp;&amp; sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 关闭selinux setenforce 0 &amp;&amp; sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config # 关闭邮件服务 systemctl stop postfix &amp;&amp; systemctl disable postfix</code></pre> <h3>1.2 主机名设置</h3> <pre><code class="language-bash">cat &gt; /etc/hosts &lt;&lt; EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.7.201 rancher01 172.16.7.202 rancher02 172.16.7.203 rancher03 172.16.7.200 rancher.hzsun.com EOF</code></pre> <h3>1.3 内核调优</h3> <pre><code class="language-bash"># 文件打开数 echo -e "root soft nofile 65535\nroot hard nofile 65535\n* soft nofile 65535\n* hard nofile 65535\n" &gt;&gt; /etc/security/limits.conf sed -i 's#4096#65535#g' /etc/security/limits.d/20-nproc.conf # kernel cat &gt;&gt; /etc/sysctl.conf&lt;&lt;EOF net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 vm.swappiness=0 vm.max_map_count=655360 EOF</code></pre> <h3>1.4 安装 docker</h3> <p>在 rancher1,rancher2,rancher3 机器上都要安装docker。 <a href="https://www.showdoc.com.cn/557523996513244?page_id=3839601638128520" title="docker安装过程">docker安装过程</a>略,可参考:<a href="https://www.showdoc.com.cn/557523996513244?page_id=3839601638128520">https://www.showdoc.com.cn/557523996513244?page_id=3839601638128520</a></p> <p>添加 国内 rancher 源 和 加速源</p> <pre><code class="language-bash">cat &gt;&gt; /etc/docker/daemon.json&lt;&lt;EOF { "oom-score-adjust": -1000, "insecure-registries": ["registry.cn-hangzhou.aliyuncs.com"], "registry-mirrors" : ["https://dekn3ozn.mirror.aliyuncs.com"], "storage-driver": "overlay2", "storage-opts": ["overlay2.override_kernel_check=true"] } EOF</code></pre> <p>说明: <code>OOMScoreAdjust=-1000</code>:防止docker服务OOM <code>registry-mirrors</code>:公网的加速器地址,可以设置多个,地址需要添加协议头(https或者http) <code>storage-driver</code>:使用OverlayFS的overlay2存储驱动。(OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay,新版的overlay2(更稳定)) 重启docker服务:</p> <pre><code class="language-bash">systemctl restart docker</code></pre> <h3>1.5 创建用户并分发秘钥</h3> <pre><code class="language-bash"># 1、在所有机器(即:rancher+worker)都要创建用户rancher worker节点虽然root可以运行,但为了安全考虑,建议以非root useradd rancher echo "rancher:123456" | chpasswd usermod -aG docker rancher # 2、在所有机器授权 [root@rancher1 ~]# vim /etc/sudoers +100 rancher ALL=(ALL) NOPASSWD:ALL # 3、以下在rancher1机器执行即可 su - rancher ssh-keygen ssh-copy-id rancher@172.16.7.201 ssh-copy-id rancher@172.16.7.202 ssh-copy-id rancher@172.16.7.203</code></pre> <h2>2. 使用rke安装K8S集群</h2> <p>说明:在 rancher1 执行 <code>下载 rancher 相关软件 可以使用国内源:</code><a href="http://mirror.cnrancher.com/">http://mirror.cnrancher.com/</a></p> <h3>2.1 安装rke/kubectl/helm</h3> <h4>2.1.1 安装rke</h4> <pre><code class="language-bash">[rancher@rancher01 ~]# wget http://rancher-mirror.cnrancher.com/rke/v1.2.2/rke_linux-amd64 \ &amp;&amp; chmod +x rke_linux-amd64 \ &amp;&amp; mv rke_linux-amd64 /usr/bin/rke</code></pre> <h4>2.1.2 安装kubectl</h4> <pre><code class="language-bash">[rancher@rancher01 ~]# wget http://rancher-mirror.cnrancher.com/kubectl/v1.19.3/linux-amd64-v1.19.3-kubectl \ &amp;&amp; chmod +x linux-amd64-v1.19.3-kubectl \ &amp;&amp; mv linux-amd64-v1.19.3-kubectl /usr/bin/kubectl # kubectl命令补全 ## CentOS需要安装bash-completion软件包 [rancher@rancher01 ~]# yum install -y bash-completion # root 使用kubectl补全功能 [rancher@rancher01 ~]# echo 'source &lt;(kubectl completion bash)' &gt;&gt; /root/.bashrc # rancher使用kubectl补全功能 [rancher@rancher01 ~]# echo 'source &lt;(kubectl completion bash)' &gt;&gt; /home/rancher/.bashrc # 验证补全命令 退出,重新登录一下即可。命令实例示例: # kubectl desc&lt;TAB&gt; no&lt;TAB&gt; node&lt;TAB&gt;</code></pre> <h4>2.1.3 安装helm</h4> <pre><code class="language-bash">[rancher@rancher01 ~]# wget http://rancher-mirror.cnrancher.com/helm/v3.4.1/helm-v3.4.1-linux-amd64.tar.gz \ &amp;&amp; tar -zxvf helm-v3.4.1-linux-amd64.tar.gz \ &amp;&amp; cd linux-amd64 \ &amp;&amp; mv helm /usr/sbin/</code></pre> <h3>2.2 创建rke文件</h3> <pre><code class="language-bash">su - rancher vim rancher-cluster.yml</code></pre> <p>rancher-cluster.yml内容如下:</p> <pre><code class="language-bash">nodes: - address: 172.16.7.201 internal_address: 172.16.7.201 # 节点内网 IP user: rancher role: ["controlplane", "etcd", "worker"] ssh_key_path: /home/rancher/.ssh/id_rsa - address: 172.16.7.202 internal_address: 172.16.7.202 user: rancher role: ["controlplane", "etcd", "worker"] ssh_key_path: /home/rancher/.ssh/id_rsa - address: 172.16.7.203 internal_address: 172.16.7.203 user: rancher role: ["controlplane", "etcd", "worker"] ssh_key_path: /home/rancher/.ssh/id_rsa services: etcd: snapshot: true creation: 6h retention: 24h # 当使用外部 TLS 终止,并且使用 ingress-nginx v0.22或以上版本时,必须。 ingress: provider: nginx options: use-forwarded-headers: "true"</code></pre> <h3>2.3 运行rke文件</h3> <pre><code class="language-bash">rke up --config ./rancher-cluster.yml</code></pre> <p>如果安装过程中有报错,可以重复执行此命令,重新安装。 完成后,它应该以这样一行结束: <code>Finished building Kubernetes cluster successfully.</code></p> <h2>4 测试集群</h2> <h3>4.1 配置环境变量</h3> <pre><code class="language-bash"># 配置 kubectl [rancher@rancher1 ~]$ mkdir -p /home/rancher/.kube [rancher@rancher1 ~]$ cp kube_config_rancher-cluster.yml $HOME/.kube/config ### 4.2 通过kubectl测试您的连接,并查看你所有节点是否处于`Ready`状态 [rancher@rancher-01 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION 172.16.7.201 Ready controlplane,etcd,worker 6m45s v1.19.3 172.16.7.202 Ready controlplane,etcd,worker 6m45s v1.19.3 172.16.7.203 Ready controlplane,etcd,worker 6m45s v1.19.3</code></pre> <h2>5 检查集群状态</h2> <pre><code class="language-bash">[rancher@rancher-01 ~]$ kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx default-http-backend-65dd5949d9-cxpx5 1/1 Running 0 6m50s ingress-nginx nginx-ingress-controller-kqmbz 1/1 Running 0 6m50s ingress-nginx nginx-ingress-controller-wm6bt 1/1 Running 0 6m50s ingress-nginx nginx-ingress-controller-zjlmx 1/1 Running 0 6m50s kube-system calico-kube-controllers-649b7b795b-m5csc 1/1 Running 0 7m4s kube-system canal-jct48 2/2 Running 0 7m4s kube-system canal-k552r 2/2 Running 0 7m4s kube-system canal-n2kcr 2/2 Running 0 7m4s kube-system coredns-6f85d5fb88-pgg7d 1/1 Running 0 7m kube-system coredns-6f85d5fb88-xlmsk 0/1 Running 0 31s kube-system coredns-autoscaler-79599b9dc6-jqnzz 1/1 Running 0 7m kube-system metrics-server-8449844bf-vjh58 1/1 Running 0 6m55s kube-system rke-coredns-addon-deploy-job-4zs5v 0/1 Completed 0 7m1s kube-system rke-ingress-controller-deploy-job-6nb7m 0/1 Completed 0 6m51s kube-system rke-metrics-addon-deploy-job-rzqq2 0/1 Completed 0 6m56s kube-system rke-network-plugin-deploy-job-vwzff 0/1 Completed 0 7m26s</code></pre> <p>等待它完成,需要一点时间。 重复快速多次执行此命令,检查集群是否稳定,如果主机未优化,可能会出现查询结果不稳定的情况。 说明: Pod 是Running或Completed状态。 STATUS 为 Running 的 Pod,READY 应该显示所有容器正在运行 (例如,3/3)。 STATUS 为 Completed的 Pod 是一次运行的作业。对于这些 Pod,READY应为0/1。</p> <h2>6 保存配置文件</h2> <p>将以下文件的副本保存在安全的位置,后期将需要这些文件来维护和升级Rancher实例。 <code>rancher-cluster.yml</code>: RKE 集群配置文件。 <code>kube_config_rancher-cluster.yml</code>: 集群的Kubeconfig 文件,此文件包含用于访问集群的凭据。 <code>rancher-cluster.rkestate</code>: Kubernetes 集群状态文件,此文件包含用于完全访问集群的凭据。</p> <h1>二、安装rancher</h1> <h2>1、安装配置Helm</h2> <p>注意:Helm的3.x版本和2.x版本的安装配置是不同的。3.x版本只需要安装好Helm客户端就行,其他的啥都不用配置。如果你用的是Helm的2.x版本,那可以参考rancher中文文档中的安装配置Helm。 Helm是Kubernetes首选的包管理工具。Helm charts为Kubernetes YAML清单文档提供模板语法。使用Helm,我们可以创建可配置的部署,而不仅仅是使用静态文件。</p> <h3>1.1 安装Helm客户端</h3> <p>由于我这里是安装的Helm-v3.x版本,所以不需要配置Helm客户端的访问权限。</p> <h3>1.2 安装Helm Server(Tiller)</h3> <p>由于我这里是安装的Helm-v3.x版本,所以不需要安装Helm Server。</p> <h2>2、Helm安装Rancher</h2> <h3>2.1 添加Chart仓库地址</h3> <p>使用helm repo add命令添加Rancher chart仓库地址,访问Rancher tag和Chart版本,替换<CHART_REPO>为您要使用的Helm仓库分支(即latest或stable)。 以rancher用户执行:</p> <pre><code class="language-bash">helm repo add rancher-stable https://releases.rancher.com/server-charts/stable helm repo update </code></pre> <h3>2.2 使用自签名SSL证书安装Rancher Server</h3> <p>Rancher Server设计默认需要开启SSL/TLS配置来保证安全,将ssl证书以Kubernetes Secret卷的形式传递给Rancher Server或Ingress Controller。首先创建证书密文,以便Rancher和Ingress Controller可以使用。我这里使用官方提供的一键生成自签名ssl证书。</p> <h4>2.2.1 如果没有自签名ssl证书,可以参考<a href="https://docs.rancher.cn/docs/rancher2/installation/options/self-signed-ssl/_index/#41-%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90-ssl-%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%E8%84%9A%E6%9C%AC" title="自签名ssl证书,一键生成ssl证书">自签名ssl证书,一键生成ssl证书</a>。</h4> <pre><code class="language-bash">[rancher@rancher-01 ~]$ mkdir ssl [rancher@rancher-01 ~]$ cd ssl/</code></pre> <p>先把一键生成ssl证书的脚本另存为<code>create_self-signed-cert.sh</code>,这里因为脚本的内容太多,就不贴出来了,详见<a href="https://www.showdoc.com.cn/963349270507135?page_id=5828190819902796" title="一键生成ssl证书链接">一键生成ssl证书链接</a>。然后再用这个脚本生成ssl证书</p> <pre><code class="language-bash">[rancher@rancher-01 ~]$ ./create_self-signed-cert.sh --ssl-domain=rancher.hzsun.com --ssl-trusted-ip=172.16.7.200,172.16.7.201 --ssl-size=2048 --ssl-date=7300</code></pre> <h4>2.2.2 一键生成的ssl自签名证书脚本将自动生成tls.crt、tls.key、cacerts.pem三个文件,文件名称不能修改。</h4> <p>如果使用你自己生成的自签名ssl证书,则需要(我理解:一键生成则不需下面a、b步骤,安装后验证是否正确) a、将服务证书(tls.crt)和CA中间证书(cacerts.pem)链合并到tls.crt文件中, b、将私钥(tls.key)复制到或者重命名为tls.key文件,将CA证书(cacerts.pem)复制或重命名为cacerts.pem。</p> <h4>2.2.3 使用kubectl在命名空间cattle-system中创建tls-ca和tls-rancher-ingress两个secret</h4> <pre><code class="language-bash"># 创建命名空间 [rancher@rancher-01 ~]$ kubectl create namespace cattle-system # 服务证书和私钥密文 [rancher@rancher-01 ~]$ kubectl -n cattle-system create \ secret tls tls-rancher-ingress \ --cert=/home/rancher/ssl/tls.crt \ --key=/home/rancher/ssl/tls.key # ca证书密文 [rancher@rancher-01 ~]$ kubectl -n cattle-system create secret \ generic tls-ca \ --from-file=/home/rancher/ssl/cacerts.pem #查看secret创建是否成功 [rancher@rancher-01 ~]$ kubectl -n cattle-system get secret NAME TYPE DATA AGE default-token-dv96q kubernetes.io/service-account-token 3 25s tls-ca Opaque 1 7s tls-rancher-ingress kubernetes.io/tls 2 16s</code></pre> <h4>2.2.4 安装Rancher Server</h4> <p>注意: 证书对应的域名需要与hostname选项匹配,否则ingress将无法代理访问Rancher。 rancher.hzsun.com 是后面访问rancher的域名,需要在/etc/hosts文件中添加关联(所有主机):</p> <pre><code class="language-bash">[rancher@rancher-01 ~]$ echo "172.16.7.200 rancher.hzsun.com" &gt;&gt; /etc/hosts [rancher@rancher-01 ~]$ echo "172.16.7.201 rancher.hzsun.com" &gt;&gt; /etc/hosts [rancher@rancher-01 ~]$ echo "172.16.7.202 rancher.hzsun.com" &gt;&gt; /etc/hosts [rancher@rancher-01 ~]$ echo "172.16.7.203 rancher.hzsun.com" &gt;&gt; /etc/hosts</code></pre> <p>执行下命令进行安装rancher</p> <pre><code class="language-bash">[rancher@rancher-01 ~]$ helm install rancher rancher-stable/rancher \ --namespace cattle-system \ --set hostname=rancher.hzsun.com \ #&lt;您自己的域名&gt; --set ingress.tls.source=secret \ --set privateCA=true \ --version 2.5.3 #指定rancher版本。</code></pre> <p>输出</p> <pre><code class="language-bash">WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/rancher/.kube/config W1202 08:50:40.601801 7226 warnings.go:67] extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress W1202 08:50:40.667651 7226 warnings.go:67] extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress NAME: rancher LAST DEPLOYED: Wed Dec 2 08:50:40 2020 NAMESPACE: cattle-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Rancher Server has been installed. NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued and Ingress comes up. Check out our docs at https://rancher.com/docs/rancher/v2.x/en/ Browse to https://rancher.hzsun.com Happy Containering! </code></pre> <p>命令很快执行完毕,需要等待较长一段时间才能访问URL。</p> <h2>3 验证 Rancher Server 是否已成功部署</h2> <h3>3.1 检查 Rancher Server 是否运行成功:</h3> <pre><code class="language-bassh">[rancher@rancher-01 ~]$ kubectl -n cattle-system rollout status deploy/rancher deployment "rancher" successfully rolled out</code></pre> <h3>3.2 通过运行以下命令来检查 deployment 的状态:</h3> <pre><code class="language-bash">[rancher@rancher-01 ~]$ kubectl -n cattle-system get deploy rancher NAME READY UP-TO-DATE AVAILABLE AGE rancher 3/3 3 3 16m</code></pre> <p>本地电脑host映射后,访问:<a href="https://rancher.hzsun.com">https://rancher.hzsun.com</a> 完成登录</p> <h2>4 创建user-cluster集群</h2> <h3>4.1 配置 rancher 国内源</h3> <p>登录rancher 选择 “Global/settings/advanced settings 标签页中,找到 system-default-registry,编辑并输入下面内容:</p> <pre><code class="language-bash">registry.cn-hangzhou.aliyuncs.com</code></pre> <h3>4.2 添加业务集群</h3> <p>选择 “Global”,在页面右上角点 “Add Cluster” 按钮,进入添加集群页面,找到如下位置: <img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/e9aacf4f8e780b056b499b247991c3e2" alt="" /> 点击如上图 “Existing nodes” 按钮,如下图: 输入新集群相关信息,如:名称:user-cluster 等信息后,点 &quot;Done&quot; 按钮,完成集群添加操作。 此时,新增的集群状态为:<code>Waiting for etcd and controlplane nodes to be registered</code></p> <h3>4.3 添加工作节点</h3> <p>选择 “Global”,在 user-cluster 该行末尾,选择Edit菜单,进入集群编辑页面。 拉到最页面最底部,勾选“etcd,Control Plane Worker”,并复制命令至计算节点中执行。 等待完成。 说明:业务集群如需要高可用,前三台worker主机需添加为</p> <pre><code class="language-bash">etcd,Control Palne,Worker</code></pre> <p>复制命令,在各worker节点上执行。等待完成,需要好长一段时间,请耐心等待。</p> <h2>5 错误解决</h2> <p>rancher 2.5.x 版本已不存在与之前的2.4.x版本同样的问题,但出现新的报错了,如下图: 若出现以下错误: <img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/3f3842ac6a313cdf8fdf3d6115e40473" alt="" /> 解决办法: 由于我们通过 hosts 文件来添加映射,所以需要为 Agent Pod 添加主机别名(/etc/hosts):</p> <h3>5.1 docker ps -a | grep agent 找到报错日志</h3> <pre><code class="language-bash">ERROR: https://rancher.hzsun.com/ping is not accessible (Could not resolve host: rancher.hzsun.com)</code></pre> <h3>5.2 在日志报错的worker节点安装kubectl</h3> <h3>5.3 获取worker集群的配置文件</h3> <pre><code class="language-bash">docker run --rm --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro --entrypoint bash $(docker inspect $(docker images -q --filter=label=io.cattle.agent=true) --format='{{index .RepoTags 0}}' | tail -1) -c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml get configmap -n kube-system full-cluster-state -o json | jq -r .data.\"full-cluster-state\" | jq -r .currentState.certificatesBundle.\"kube-admin\".config | sed -e "/^[[:space:]]*server:/ s_:.*_: \"https://127.0.0.1:6443\"_"' &gt; kubeconfig_admin.yaml</code></pre> <h3>5.4 安装kubectl</h3> <p>参见:本文档的<code>2.1.2 安装kubectl</code></p> <h3>5.5 直接执行下面命令进行修改 cattle-cluster-agent</h3> <p>rancher 2.5.x 版本与之前的2.4.x版本格式也不同,注意如下内容:</p> <p><code>说明:在不同环境下,使用不同 ‘域名’ 和 ‘IP’ 进行rancher安装时,请注意及时修改 ‘域名’ 和 ‘IP’(如:rancher.hzsun.com 和 172.16.7.200)</code></p> <pre><code class="language-bash">kubectl --kubeconfig ./kubeconfig_admin.yaml -n cattle-system patch deployments cattle-cluster-agent --patch '{ "spec": { "template": { "spec": { "hostAliases": [ { "hostnames": [ "rancher.hzsun.com" ], "ip": "172.16.7.200" } ] } } } }'</code></pre> <pre><code class="language-bash">kubectl --kubeconfig ./kubeconfig_admin.yaml -n cattle-system patch daemonsets cattle-node-agent --patch '{ "spec": { "template": { "spec": { "hostAliases": [ { "hostnames": [ "rancher.hzsun.com" ], "ip": "172.16.7.200" } ] } } } }'</code></pre> <p>至此,业务集群的问题完美解决。</p> <p>1.报错官方解决办法: <a href="https://docs.rancher.cn/docs/rancher2/faq/install/_index/#error-httpsranchermyorgping-is-not-accessible-could-not-resolve-host-ranchermyorg">https://docs.rancher.cn/docs/rancher2/faq/install/_index/#error-httpsranchermyorgping-is-not-accessible-could-not-resolve-host-ranchermyorg</a></p> <p>2.制作自签名证书 <a href="http://blog.zhenglin.work/ca/make_key.html">http://blog.zhenglin.work/ca/make_key.html</a> 手动制作自签名证书(NGINX用) 利用脚本制作所需证书(可以用在harbor和kubernetes、rancher部署上) RepoTags 0 | tail -1</p> <p>3.如何在rancher平台宕机情况下,继续使用k8s集群 <a href="http://blog.zhenglin.work/k8s/how_to_use_kubectl_noserver.html">http://blog.zhenglin.work/k8s/how_to_use_kubectl_noserver.html</a></p>

页面列表

ITEM_HTML