miaoyun+Rancher+K8S学习与实践


Rancher 2.4.4-K8S(rancher证书)高可用集群HA部署-online insta

<p>安装说明:这是Rancher v2.4.4版本的在线安装文档,证书采用rancher默认生成的自签名证书,此证书有效期10年,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 相同。 ????三台worker主机的/etc/hosts是否也需要添加另外两台机子的IP 与 主机名 对应关系进来。?????如果局域网内没有DNS服务器,是需要。</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 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 执行 下载 rancher 相关软件 可以使用国内源:<a href="http://mirror.cnrancher.com/">http://mirror.cnrancher.com/</a></p> <h3>2.1 安装rke/kubectl/helm</h3> <p>下载rke文件并移动到/usr/sbin</p> <pre><code class="language-bash">[rancher@rancher01 ~]# wget https://github.com/rancher/rke/releases/download/v1.1.2/rke_linux-amd64 \ &amp;&amp; chmod +x rke_linux-amd64 \ &amp;&amp; mv rke_linux-amd64 /usr/bin/rke</code></pre> <p>安装kubectl</p> <pre><code class="language-bash">[rancher@rancher01 ~]# wget https://docs.rancher.cn/download/kubernetes/linux-amd64-v1.18.3-kubectl \ &amp;&amp; chmod +x linux-amd64-v1.18.3-kubectl \ &amp;&amp; mv linux-amd64-v1.18.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> <p>安装helm</p> <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@rancher01 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION 172.16.7.201 Ready controlplane,etcd,worker 10h v1.17.6 172.16.7.202 Ready controlplane,etcd,worker 10h v1.17.6 172.16.7.203 Ready controlplane,etcd,worker 10h v1.17.6</code></pre> <h2>5 检查集群状态</h2> <pre><code class="language-bash">[rancher@rancher01 ~]$ kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx default-http-backend-67cf578fc4-5vn4f 1/1 Running 1 10h ingress-nginx nginx-ingress-controller-8k2m2 1/1 Running 1 10h ingress-nginx nginx-ingress-controller-tpr6v 1/1 Running 1 10h ingress-nginx nginx-ingress-controller-zk74g 1/1 Running 1 10h kube-system canal-9vr2d 2/2 Running 2 10h kube-system canal-gx5qd 2/2 Running 2 10h kube-system canal-vkbrp 2/2 Running 2 10h kube-system coredns-7c5566588d-5hn8v 1/1 Running 1 10h kube-system coredns-7c5566588d-w86xx 1/1 Running 1 10h kube-system coredns-autoscaler-65bfc8d47d-qzczj 1/1 Running 1 10h kube-system metrics-server-6b55c64f86-zlz67 1/1 Running 1 10h kube-system rke-coredns-addon-deploy-job-nk6r2 0/1 Completed 0 10h kube-system rke-ingress-controller-deploy-job-7nmkt 0/1 Completed 0 10h kube-system rke-metrics-addon-deploy-job-hjq6v 0/1 Completed 0 10h kube-system rke-network-plugin-deploy-job-5jkgp 0/1 Completed 0 10h</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 安装heml和kubectl</h2> <p>参考:<code>2.1 安装rke/kubectl/helm</code></p> <h2>2、添加 Helm Chart 仓库</h2> <pre><code class="language-bash">helm repo add rancher-stable https://releases.rancher.com/server-charts/stable</code></pre> <h2>3、为 Rancher 创建 Namespace</h2> <pre><code class="language-bash">kubectl create namespace cattle-system</code></pre> <h2>4、选择证书</h2> <p>这次选 rancher 默认生成的证书 说明: 用rancher默认产生的证书有效期是10年,rancher可以使用一年,一年后,rancher自己会续期。即: CA 10年 SSL 1年,但过期自动续签</p> <h2>5、安装 cert-manager</h2> <h3>5.1 安装 CustomResourceDefinition 资源</h3> <pre><code class="language-bash">kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml</code></pre> <h3>5.2 为 cert-manager 创建命名空间</h3> <pre><code class="language-bash">kubectl create namespace cert-manager</code></pre> <h3>5.3 添加 Jetstack Helm 仓库</h3> <pre><code class="language-bash">helm repo add jetstack https://charts.jetstack.io</code></pre> <h3>5.4 更新本地 Helm chart 仓库缓存</h3> <pre><code class="language-bash">helm repo update</code></pre> <h3>5.5 安装 cert-manager Helm chart</h3> <pre><code class="language-bash">helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v0.15.0</code></pre> <p>安装完 cert-manager 后,您可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:</p> <pre><code class="language-bash"> kubectl get pods --namespace cert-manager</code></pre> <p>等待它完成,需要一点时间。</p> <h2>6、根据选择的 SSL 选项,通过 Helm 安装 Rancher</h2> <p>方式 A:使用 Rancher 生成的自签名证书</p> <pre><code class="language-bash">helm install rancher rancher-stable/rancher \ --namespace cattle-system \ --set hostname=rancher.hzsun.com \ --version 2.4.4</code></pre> <p>输出</p> <pre><code class="language-bash"> WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/rancher/.kube/config NAME: rancher LAST DEPLOYED: Wed Nov 25 08:17:53 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>7 验证 Rancher Server 是否已成功部署</h2> <h3>7.1 检查 Rancher Server 是否运行成功:</h3> <pre><code class="language-bassh">kubectl -n cattle-system rollout status deploy/rancher</code></pre> <h3>7.2 通过运行以下命令来检查 deployment 的状态:</h3> <pre><code class="language-bash">[rancher@rancher01 ~]$ kubectl -n cattle-system get deploy rancher NAME READY UP-TO-DATE AVAILABLE AGE rancher 3/3 3 3 6h</code></pre> <h3>7.3 错误解决</h3> <p>本地电脑host映射后,访问:<a href="https://rancher.hzsun.com">https://rancher.hzsun.com</a> 完成登录 若出现以下错误:</p> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/bc13cf8cfc64e8c813df36f77e7cb485" alt="" /></p> <p>解决办法: 由于我们通过 hosts 文件来添加映射,所以需要为 Agent Pod 添加主机别名(/etc/hosts): (1)直接执行下面命令进行修改 cattle-cluster-agent</p> <pre><code class="language-bash">kubectl -n cattle-system patch deployments cattle-cluster-agent --patch '{ "spec": { "template": { "spec": { "hostAliases": [ { "hostnames": [ "rancher.hzsun.com" ], "ip": "172.16.7.200" } ] } } } }'</code></pre> <p>(2)可以直接修改YAML,再重新部署应用,也能解决。 在81行与82行之间(未添加前的行数,可能稍有差别)添加如下四行内容:</p> <pre><code class="language-bash"> hostAliases: - hostnames: - rancher.hzsun.com ip: 172.16.7.200</code></pre> <p>(3)直接执行下面命令进行修改 cattle-node-agent</p> <pre><code class="language-bash">kubectl -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>(4)可以直接修改YAML,再重新部署应用,也能解决。 在72行与73行之间左右(未添加前的行数,可能稍有差别)添加如下四行内容:</p> <pre><code class="language-bash"> hostAliases: - hostnames: - rancher.hzsun.com ip: 172.16.7.200</code></pre> <h2>8 创建user-cluster集群</h2> <h3>8.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>8.2 给user-cluster集群添加worker主机</h3> <p>worker节点安装时,需要开通的端口如下:</p> <pre><code class="language-bash">firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent firewall-cmd --zone=public --add-port=10250/tcp --permanent firewall-cmd --zone=public --add-port=6443/tcp --permanent firewall-cmd --reload</code></pre> <h3>8.3 主机需配置hosts文件</h3> <p>把域名加入到所有主机的 /etc/hosts 文件中,</p> <pre><code class="language-bash">echo '172.16.7.200 rancher.hzsun.com' &gt;&gt; /etc/hosts</code></pre> <h3>8.4 前三台worker主机添加为</h3> <pre><code class="language-bash">etcd,Control Palne,Worker</code></pre> <p>复制命令,在各worker节点上执行。等待完成,需要好长一段时间,请耐心等待。</p> <h3>8.5 若出现 7.3 步中的错误</h3> <p>在user-cluster/system的Namespace:cattle-system下的应用cattle-cluster-agent报错如下:</p> <p>解决办法:(如图) 采用 7.3步骤 的命令方法不成功,改用这种方法: (1)选择user-cluster/system,在Namespace:cattle-system下的应用:cattle-cluster-agent右边菜单中选择:View/Edis YAML 菜单进入 (2)在81行与82行之间(未添加前的行数,可能稍有差别)添加如下四行内容</p> <pre><code class="language-bash"> hostAliases: - hostnames: - rancher.hzsun.com ip: 172.16.7.200</code></pre> <ul> <li>注意格式对齐。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/5ae66a10c3388727d0439dc11b6deb11" alt="" /></li> </ul> <p>(3)重新部署应用即可。</p> <p>其它:</p> <h2>1、在所有机器都操作创建用户rancher</h2> <h3>1.1 此处的命令,等同前面的命令。</h3> <pre><code class="language-bash">groupadd docker useradd rancher -G docker echo "123456" | passwd --stdin rancher</code></pre> <h3>1.2 下面两行命令相似</h3> <pre><code class="language-bash">echo "rancher:123456" | chpasswd</code></pre> <p>等于</p> <pre><code class="language-bash">echo "123456" | passwd --stdin rancher</code></pre>

页面列表

ITEM_HTML