我是乖乖 發表於 2019-9-24 13:11:00

Kubernetes Dashboard 终结者:KubeSphere

<blockquote>
<p>原文链接:Kubernetes Dashboard 终结者:KubeSphere</p>
</blockquote>
<p>2018 年 7 月份,青云在 Cloud Insight 云计算峰会上推出了一款全新的容器平台——<code>KubeSphere</code>,旨在帮助企业快速低成本管理容器。并且 <code>KubeSphere</code> 本身是开源的,它是基于 Kubernetes 构建的分布式、多租户、企业级开源容器平台,具有强大且完善的网络与存储能力,并通过极简的人机交互提供完善的多集群管理、CI / CD 、微服务治理、应用管理等功能,帮助企业在云、虚拟化及物理机等异构基础设施上快速构建、部署及运维容器架构,实现应用的敏捷开发与全生命周期管理。</p>
<p>KubeSphere 目前最新的版本为高级版 <code>2.0.2</code>,并且所有版本 100% 开源。它的 Dashboard 是这个样子的:</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130930676-1980227527.jpg" alt="" loading="lazy"></p>
<center><p id="small">KubeSphere 主界面</p></center>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130933023-1981888500.jpg" alt="" loading="lazy"></p>
<center><p id="small">Istio 微服务治理界面</p></center>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130939747-2003800250.png" alt="" loading="lazy"></p>
<center><p id="small">多维度监控界面</p></center>
<p>这个颜值,比 Kubernetes Dashboard 不知道高到哪里去了,感兴趣的小伙伴可以给一个 Github Star 鼓励一下开发小哥。访问官网请戳这里:kubesphere.io</p>
<p>KubeSphere 官网大致提供了两种安装方式,一种是安装 k8s 集群和 KubeSphere,一种是在现有的 k8s 集群上安装 KubeSphere。我想大多数用户的需求肯定是在现有的集群上安装,但官方文档给出的部署方案有很多奇怪的坑,本文就来为大家一一填平这些坑。</p>
<h2 id="1-环境准备">1. 环境准备</h2>
<p>当然,还有些同学可能会和我一样有强迫症,即使目前没有现成的 Kubernetes 环境,我也不想让 KubeSphere 给我来个全家桶,还是想自己搭建 k8s 集群,怎么办,二进制部署好烦啊,像我这种菜鸟没有半天搞不定,有没有简单快捷的方法,十分钟就能建好集群?当然有,用 sealos 就好了,只需一条命令即可跨主机安装所有依赖,不需要 <code>ansible</code>,不需要 ssh 登录到其他机器,安装之前需要做一些准备工作:</p>
<ul>
<li>所有节点安装并启动 docker</li>
<li>下载 kubernetes 离线安装包</li>
<li>下载最新版本 sealos(目前稳定版是 2.0.4)</li>
</ul>
<p>我的机器规划是这样的:</p>
<table>
<thead>
<tr>
<th style="text-align: center">Hostname</th>
<th style="text-align: center">IP</th>
<th style="text-align: center">Role</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">sealos-node1</td>
<td style="text-align: center">192.168.0.2</td>
<td style="text-align: center">master</td>
</tr>
<tr>
<td style="text-align: center">sealos-node2</td>
<td style="text-align: center">192.168.0.3</td>
<td style="text-align: center">node</td>
</tr>
<tr>
<td style="text-align: center">sealos-node3</td>
<td style="text-align: center">192.168.0.4</td>
<td style="text-align: center">node</td>
</tr>
</tbody>
</table>
<p>安装步骤分为以下几步:</p>
<p>1、在 master 上执行以下命令:</p>
<pre><code class="language-bash">$ sealos init --master 192.168.0.2 \
--node 192.168.0.3 \
--node 192.168.0.4 \
--user root \
--passwd password \
--version v1.14.5 \
--pkg-url /root/kube1.14.5.tar.gz
</code></pre>
<p>2、没有了。</p>
<p>真没有了,如果想了解原理,请查看 sealos 的官方文档。</p>
<p>下面就正式进入 KubeSphere 的安装环节。</p>
<h2 id="2-安装-kubesphere">2. 安装 KubeSphere</h2>
<p>1、首先将 <code>ks-installer</code> 仓库克隆到 master 节点上:</p>
<pre><code class="language-bash">$ git clone https://github.com/kubesphere/ks-installer -b advanced-2.0.2
</code></pre>
<p>2、在 Kubernetes 集群中创建名为 <code>kubesphere-system</code> 和 <code>kubesphere-monitoring-system</code> 的 namespace。</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130940227-1593927597.jpg" alt="" loading="lazy"></p>
<p>3、创建 Kubernetes 集群 CA 证书的 Secret。</p>
<blockquote>
<p>注:按照当前集群 ca.crt 和 ca.key 证书路径创建(Kubeadm 创建集群的证书路径一般为 <code>/etc/kubernetes/pki</code>)</p>
</blockquote>
<pre><code class="language-bash">$ kubectl -n kubesphere-system create secret generic kubesphere-ca\
--from-file=ca.crt=/etc/kubernetes/pki/ca.crt\
--from-file=ca.key=/etc/kubernetes/pki/ca.key
</code></pre>
<p>4、创建 etcd 的证书 Secret。</p>
<blockquote>
<p>注:根据集群实际 etcd 证书位置创建;</p>
</blockquote>
<ul>
<li>若 etcd 已经配置过证书,则参考如下创建:</li>
</ul>
<pre><code class="language-bash">$ kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs\
--from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt\
--from-file=etcd-client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt\
--from-file=etcd-client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key
</code></pre>
<ul>
<li>若 etcd 没有配置证书,则创建空 Secret(以下命令适用于 Kubeadm 创建的 Kubernetes 集群环境):</li>
</ul>
<pre><code class="language-bash">$ kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs
</code></pre>
<p>我这里是使用 sealos 搭建的集群,可以通过查看 etcd 的资源清单文件来获取它的证书:</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130941836-875374952.jpg" alt="" loading="lazy"></p>
<p>5、修改部署文件</p>
<p>由于 KubeSphere 部署过程中涉及的组件非常多,安装过程中会有很多莫名其妙的坑,你可能会遇到以下几个问题:</p>
<p><strong>问题 1:</strong>如果现有集群中已经安装有 metrics-server,需要在配置文件中将 <code>metrics_server_enable</code> 设置为 False。我的集群中没有安装这个组件,所以不用设为 False。</p>
<p><strong>问题 2:</strong>在安装过程中卡死在 <code>Waitting for ks-sonarqube port to become open</code> 部分,节点上通过 NodePort 已经可以正常访问 sonarqube ,该问题没有解决,由于是一个不影响全局安装的一个操作,所以同样在配置文件中将 <code>sonarqube_enable</code> 设置为 False。</p>
<p><strong>问题 3:</strong>如果当前的集群资源不是很足,可以临时取消掉 istio 的安装,后续再开启 istio 的支持。</p>
<p><strong>问题 4:</strong>KubeSphere 的组件默认情况下使用持久化存储,需要确保集群中有一个默认的 <code>StorageClass</code> 资源对象,如果确实没有,只是想临时部署一个 demo,可以在配置文件中将 <code>persistence</code> 里面的 <code>enable</code> 设置为 false。</p>
<p>我最终用于安装 KubeSphere 的配置文件如下:</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130944524-1326869955.jpg" alt="" loading="lazy"></p>
<p>只需要修改 ConfigMap 的值即可,其中 <code>kube_apiserver_host</code> 就是现有集群的 APIServer 地址,<code>etcd_endpoint_ips</code> 就是 etcd 的所在节点 IP,默认端口为 2379,如果你是集群模式 etcd,这里可以填写多个节点 IP,中间用 <code>,</code> 隔开,下面就是不需要安装的组件设置为 False。</p>
<p>6、自定义 Docker 镜像。</p>
<p>因为目前 ConfigMap 中不能禁用日志,所以只能强行修改 ansible playbook 了。进入 ks-installer 的根目录,将 <code>kubesphere.yaml</code> 中的 <code>ks-logging</code> 删除:</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130946728-2029843391.jpg" alt="" loading="lazy"></p>
<p>然后修改 <code>Dockerfile</code>,将 Helm v2 替换为 Helm v3,原因你懂得,我可不想装 tiller。修改后的 Dockerfile 内容如下:</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130949062-1280374010.jpg" alt="" loading="lazy"></p>
<p>最后重新构建镜像,将部署文件中 Deployment 的镜像改为自定义的镜像,就可以直接部署了:</p>
<pre><code class="language-bash">$ kubectl apply -f deploy/kubesphere.yaml

$ kubectl -n kubesphere-system get pod
NAME                                     READY   STATUS      RESTARTS   AGE
ks-account-585846bd44-mt7ss            1/1   Running   0          3h9m
ks-apigateway-7d77cb9495-hxgz8         1/1   Running   0          3h9m
ks-apiserver-697c5f4859-dsbmm            1/1   Running   0          3h7m
ks-console-5b8fbf45c4-7hxrw            1/1   Running   0          3h8m
ks-console-5b8fbf45c4-hj4bj            1/1   Running   0          3h8m
ks-controller-manager-7497f6c944-4k8wd   1/1   Running   0          3h8m
ks-docs-65999c97c9-5f9z7               1/1   Running   0          3h37m
kubesphere-installer-6j49s               0/1   Completed   0          3h10m
openldap-78df9f7b47-wvs5n                1/1   Running   0          3h38m
redis-99f5985b8-2d62q                  1/1   Running   0          3h38m

$ kubectl -n kubesphere-system get job
NAME                   COMPLETIONS   DURATION   AGE
kubesphere-installer   1/1         2m9s       3h10m
</code></pre>
<p>如果上面用于安装的 Job 是完成状态的话,证明 KubeSphere 已经安装成功了。</p>
<p>可以创建一个 IngressRoute 对象来访问 KubeSphere:</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924130957118-2145210753.jpg" alt="" loading="lazy"></p>
<p>将域名信息加入本地电脑的 hosts 中,就可以在浏览器中访问 KubeSphere 的 Dashboard 了。</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924131013555-2054120995.png" alt="" loading="lazy"></p>
<p>默认的集群管理员账号为:</p>
<ul>
<li>用户名:admin</li>
<li>密码:P@88w0rd</li>
</ul>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924131034918-1167685799.png" alt="" loading="lazy"></p>
<p>详细的使用方式可以参考官方文档:https://kubesphere.io/docs/zh-CN/</p>
<h2 id="3-参考资料">3. 参考资料</h2>
<ul>
<li>在现有 Kubernetes 集群上安装 KubeSphere</li>
</ul>
<h2 id="微信公众号">微信公众号</h2>
<p>扫一扫下面的二维码关注微信公众号,在公众号中回复◉加群◉即可加入我们的云原生交流群,和孙宏亮、张馆长、阳明等大佬一起探讨云原生技术</p>
<p><img src="https://img2018.cnblogs.com/blog/1737323/201909/1737323-20190924131042886-15929337.gif" alt="" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/ryanyangcs/p/11577767.html
頁: [1]
查看完整版本: Kubernetes Dashboard 终结者:KubeSphere