<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>服务器 on F嘉阳</title><link>https://blog.fjy8018.top/categories/%E6%9C%8D%E5%8A%A1%E5%99%A8/</link><description>Recent content in 服务器 on F嘉阳</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 04 Aug 2024 19:37:09 +0800</lastBuildDate><atom:link href="https://blog.fjy8018.top/categories/%E6%9C%8D%E5%8A%A1%E5%99%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>Kubesphere落地DevOps</title><link>https://blog.fjy8018.top/archives/273/</link><pubDate>Sat, 19 Jun 2021 22:16:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/273/</guid><description>&lt;h2 id="创建企业空间"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e4%bc%81%e4%b8%9a%e7%a9%ba%e9%97%b4" class="header-anchor"&gt;&lt;/a&gt;创建企业空间&#10;&lt;/h2&gt;&lt;p&gt;创建一个企业空间和一个帐户 (&lt;code&gt;project-admin&lt;/code&gt;)，必须邀请该帐户至该企业空间并赋予 &lt;code&gt;workspace-self-provisioner&lt;/code&gt; 角色。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623583200028" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623583200028.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;进入企业空间，切换到DevOps工程，点击创建&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623583256804" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623583256804.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;创建工程&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623583296345" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623583296345.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;h2 id="安装helm"&gt;&lt;a href="#%e5%ae%89%e8%a3%85helm" class="header-anchor"&gt;&lt;/a&gt;安装helm&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 &lt;span class="p"&gt;|&lt;/span&gt; bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="找不到环境变量报错"&gt;&lt;a href="#%e6%89%be%e4%b8%8d%e5%88%b0%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e6%8a%a5%e9%94%99" class="header-anchor"&gt;&lt;/a&gt;找不到环境变量报错&#10;&lt;/h3&gt;&lt;p&gt;安装helm遇到报错&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 &lt;span class="p"&gt;|&lt;/span&gt; bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; % Total % Received % Xferd Average Speed Time Time Time Current&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;unset&lt;/span&gt; -f pathmunge&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Dload Upload Total Spent Left Speed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;100&lt;/span&gt; &lt;span class="m"&gt;11248&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt; &lt;span class="m"&gt;11248&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;61543&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; --:--:-- --:--:-- --:--:-- &lt;span class="m"&gt;61802&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Helm v3.6.0 is available. Changing from version v3.2.1.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Downloading https://get.helm.sh/helm-v3.6.0-linux-amd64.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Verifying checksum... Done.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Preparing to install helm into /usr/local/bin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm installed into /usr/local/bin/helm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm not found. Is /usr/local/bin on your &lt;span class="nv"&gt;$PATH&lt;/span&gt;?&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Failed to install helm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; For support, go to https://github.com/helm/helm.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;则需要配置环境变量&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/profile&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 添加配置&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/bin:&lt;span class="nv"&gt;$PATH&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;source&lt;/span&gt; /etc/profile&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;验证&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version.BuildInfo&lt;span class="o"&gt;{&lt;/span&gt;Version:&lt;span class="s2"&gt;&amp;#34;v3.6.0&amp;#34;&lt;/span&gt;, GitCommit:&lt;span class="s2"&gt;&amp;#34;7f2df6467771a75f5646b7f12afb408590ed1755&amp;#34;&lt;/span&gt;, GitTreeState:&lt;span class="s2"&gt;&amp;#34;clean&amp;#34;&lt;/span&gt;, GoVersion:&lt;span class="s2"&gt;&amp;#34;go1.16.3&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装sonarqube"&gt;&lt;a href="#%e5%ae%89%e8%a3%85sonarqube" class="header-anchor"&gt;&lt;/a&gt;安装SonarQube&#10;&lt;/h2&gt;&lt;p&gt;执行以下命令安装 SonarQube 服务器&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm upgrade --install sonarqube sonarqube --repo https://charts.kubesphere.io/main -n kubesphere-devops-system --create-namespace --set service.type&lt;span class="o"&gt;=&lt;/span&gt;NodePort&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589400716" class="gallery-image" data-flex-basis="903px" data-flex-grow="376" height="361" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623589400716.png" width="1359"&gt;&lt;/p&gt;&#10;&lt;p&gt;执行以下命令以获取 SonarQube NodePort&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;NODE_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl get --namespace kubesphere-devops-system -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{.spec.ports[0].nodePort}&amp;#34;&lt;/span&gt; services sonarqube-sonarqube&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;NODE_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl get nodes --namespace kubesphere-devops-system -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{.items[0].status.addresses[0].address}&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; http://&lt;span class="nv"&gt;$NODE_IP&lt;/span&gt;:&lt;span class="nv"&gt;$NODE_PORT&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589466239" class="gallery-image" data-flex-basis="1970px" data-flex-grow="821" height="166" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623589466239.png" width="1363"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时可在kubesphere控制台中看到sonar服务&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589521856" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/e160945c268d616ce126.png"&gt;&lt;/p&gt;&#10;&lt;h2 id="配置-sonarqube-服务器"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae-sonarqube-%e6%9c%8d%e5%8a%a1%e5%99%a8" class="header-anchor"&gt;&lt;/a&gt;配置 SonarQube 服务器&#10;&lt;/h2&gt;&lt;p&gt;访问地址，点击右上角的 &lt;strong&gt;Log in&lt;/strong&gt;，然后使用默认帐户 &lt;code&gt;admin/admin&lt;/code&gt; 登录。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589484956" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/318f45c8e4470dac1fb4.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="创建-sonarqube-管理员令牌-token"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba-sonarqube-%e7%ae%a1%e7%90%86%e5%91%98%e4%bb%a4%e7%89%8c-token" class="header-anchor"&gt;&lt;/a&gt;创建 SonarQube 管理员令牌 (Token)&#10;&lt;/h3&gt;&lt;p&gt;点击右上角字母 &lt;strong&gt;A&lt;/strong&gt;，然后从菜单中选择 &lt;strong&gt;My Account&lt;/strong&gt; 以转到 &lt;strong&gt;Profile&lt;/strong&gt; 页面。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589658291" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623589658291.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;生成token&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589677983" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623589677983.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;h3 id="创建-webhook-服务器"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba-webhook-%e6%9c%8d%e5%8a%a1%e5%99%a8" class="header-anchor"&gt;&lt;/a&gt;创建 Webhook 服务器&#10;&lt;/h3&gt;&lt;p&gt;执行以下命令获取 SonarQube Webhook 的地址。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;NODE_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl get --namespace kubesphere-devops-system -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{.spec.ports[0].nodePort}&amp;#34;&lt;/span&gt; services ks-jenkins&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;NODE_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl get nodes --namespace kubesphere-devops-system -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{.items[0].status.addresses[0].address}&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; http://&lt;span class="nv"&gt;$NODE_IP&lt;/span&gt;:&lt;span class="nv"&gt;$NODE_PORT&lt;/span&gt;/sonarqube-webhook/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589732948" class="gallery-image" data-flex-basis="1768px" data-flex-grow="736" height="185" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623589732948.png" width="1363"&gt;&lt;/p&gt;&#10;&lt;p&gt;依次点击 &lt;strong&gt;Administration&lt;/strong&gt;、&lt;strong&gt;Configuration&lt;/strong&gt; 和 &lt;strong&gt;Webhooks&lt;/strong&gt; 创建一个 Webhook。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589828830" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/5d85d8f656afd2acd16e.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击 &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;由于webhook都通过内部网络调用，故可以使用内部网络地址&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623589887169" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/8d5a1ac24ac1f38e34a5.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="将-sonarqube-配置添加到-ks-installer"&gt;&lt;a href="#%e5%b0%86-sonarqube-%e9%85%8d%e7%bd%ae%e6%b7%bb%e5%8a%a0%e5%88%b0-ks-installer" class="header-anchor"&gt;&lt;/a&gt;将 SonarQube 配置添加到 ks-installer&#10;&lt;/h3&gt;&lt;p&gt;执行以下命令编辑 &lt;code&gt;ks-installer&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl edit cc -n kubesphere-system ks-installer&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;搜寻至 &lt;code&gt;devops&lt;/code&gt;。添加字段 &lt;code&gt;sonarqube&lt;/code&gt; 并在其下方指定 &lt;code&gt;externalSonarUrl&lt;/code&gt; 和 &lt;code&gt;externalSonarToken&lt;/code&gt;。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;devops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_MaxRAM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2g&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_Xms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512m&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_Xmx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512m&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsMemoryLim&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsMemoryReq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1500Mi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;8Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sonarqube&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;externalSonarUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http://10.170.0.5:32108&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;externalSonarToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;c6a6e2e15a9d52e30b744df0eef4c639bbea88a1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;完成操作后保存此文件。&lt;/p&gt;&#10;&lt;h3 id="将-sonarqube-服务器添加至-jenkins"&gt;&lt;a href="#%e5%b0%86-sonarqube-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%b7%bb%e5%8a%a0%e8%87%b3-jenkins" class="header-anchor"&gt;&lt;/a&gt;将 SonarQube 服务器添加至 Jenkins&#10;&lt;/h3&gt;&lt;p&gt;执行以下命令获取 Jenkins 的地址。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;NODE_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl get --namespace kubesphere-devops-system -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{.spec.ports[0].nodePort}&amp;#34;&lt;/span&gt; services ks-jenkins&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;NODE_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl get nodes --namespace kubesphere-devops-system -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{.items[0].status.addresses[0].address}&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; http://&lt;span class="nv"&gt;$NODE_IP&lt;/span&gt;:&lt;span class="nv"&gt;$NODE_PORT&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590243987" class="gallery-image" data-flex-basis="2006px" data-flex-grow="836" height="163" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590243987.png" width="1363"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用地址 &lt;code&gt;http://{$Public IP}:30180&lt;/code&gt; 访问 Jenkins。安装 KubeSphere 时，默认情况下也会安装 Jenkins 仪表板。此外，Jenkins 还配置有 KubeSphere LDAP，这意味着您可以直接使用 KubeSphere 帐户（例如 &lt;code&gt;admin/P@88w0rd&lt;/code&gt;）登录 Jenkins。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590218736" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590218736.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用kubesphere admin账户登录&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590300294" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590300294.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;前往&lt;strong&gt;系统管理&lt;/strong&gt;下的 &lt;strong&gt;Manage Credentials&lt;/strong&gt; 并点击 &lt;strong&gt;Stores scoped to Jenkins&lt;/strong&gt; 下的 &lt;strong&gt;Jenkins&lt;/strong&gt;，再点击&lt;strong&gt;全局凭据 (unrestricted)&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590813853" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590813853.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击左侧导航栏的&lt;strong&gt;添加凭据&lt;/strong&gt;，用 SonarQube 管理员令牌添加凭证&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590901716" class="gallery-image" data-flex-basis="555px" data-flex-grow="231" height="832" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590901716.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击左侧的&lt;strong&gt;系统管理&lt;/strong&gt;，向下翻页找到并点击&lt;strong&gt;系统配置&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590362224" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590362224.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;搜寻到 &lt;strong&gt;SonarQube servers&lt;/strong&gt;，然后点击 &lt;strong&gt;Add SonarQube&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590399204" class="gallery-image" data-flex-basis="629px" data-flex-grow="262" height="733" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590399204.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;添加sonar服务器地址和名称，点击&lt;strong&gt;应用&lt;/strong&gt;完成操作。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623590948756" class="gallery-image" data-flex-basis="400px" data-flex-grow="167" height="1152" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623590948756.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;h3 id="将-sonarqubeurl-添加到-kubesphere-控制台"&gt;&lt;a href="#%e5%b0%86-sonarqubeurl-%e6%b7%bb%e5%8a%a0%e5%88%b0-kubesphere-%e6%8e%a7%e5%88%b6%e5%8f%b0" class="header-anchor"&gt;&lt;/a&gt;将 sonarqubeURL 添加到 KubeSphere 控制台&#10;&lt;/h3&gt;&lt;p&gt;指定 &lt;code&gt;sonarqubeURL&lt;/code&gt;，以便可以直接从 KubeSphere 控制台访问 SonarQube。&lt;/p&gt;&#10;&lt;p&gt;执行以下命令：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl edit cm -n kubesphere-system ks-console-config&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;搜寻到 &lt;code&gt;client&lt;/code&gt;，添加 &lt;code&gt;devops&lt;/code&gt; 字段并指定 &lt;code&gt;sonarqubeURL&lt;/code&gt;。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubesphere&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v3.1.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1.20.4&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openpitrix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v0.3.5&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enableKubeConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;devops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sonarqubeURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http://34.92.90.181:32108&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591094844" class="gallery-image" data-flex-basis="327px" data-flex-grow="136" height="1000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591094844.png" width="1363"&gt;&lt;/p&gt;&#10;&lt;h3 id="重启服务"&gt;&lt;a href="#%e9%87%8d%e5%90%af%e6%9c%8d%e5%8a%a1" class="header-anchor"&gt;&lt;/a&gt;重启服务&#10;&lt;/h3&gt;&lt;p&gt;执行以下命令。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl -n kubesphere-system rollout restart deploy ks-apiserver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl -n kubesphere-system rollout restart deploy ks-console&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="为新工程创建-sonarqube-token"&gt;&lt;a href="#%e4%b8%ba%e6%96%b0%e5%b7%a5%e7%a8%8b%e5%88%9b%e5%bb%ba-sonarqube-token" class="header-anchor"&gt;&lt;/a&gt;为新工程创建 SonarQube Token&#10;&lt;/h2&gt;&lt;p&gt;创建一个 SonarQube 令牌，以便您的流水线可以在运行时与 SonarQube 通信。&lt;/p&gt;&#10;&lt;p&gt;在 SonarQube 控制台上，点击 &lt;strong&gt;Create new project&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591255909" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591255909.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;设置工程名称&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591269495" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591269495.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;生成token&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591326774" class="gallery-image" data-flex-basis="459px" data-flex-grow="191" height="1005" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591326774.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;创建令牌后，点击 &lt;strong&gt;Continue&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591357570" class="gallery-image" data-flex-basis="515px" data-flex-grow="214" height="895" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591357570.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;分别选择 &lt;strong&gt;Java&lt;/strong&gt; 和 &lt;strong&gt;Maven&lt;/strong&gt;。复制下图所示绿色框中的序列号，如果要在流水线中使用，则需要在&lt;a class="link" href="https://kubesphere.io/zh/docs/devops-user-guide/how-to-use/credential-management/#%e5%88%9b%e5%bb%ba%e5%87%ad%e8%af%81" target="_blank" rel="noopener"&#10; &gt;凭证&lt;/a&gt;中添加此序列号。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591381678" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1574" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591381678.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;h2 id="创建流水线工程"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e6%b5%81%e6%b0%b4%e7%ba%bf%e5%b7%a5%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;创建流水线工程&#10;&lt;/h2&gt;&lt;h3 id="创建凭证"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e5%87%ad%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;创建凭证&#10;&lt;/h3&gt;&lt;p&gt;登录 KubeSphere 控制台。转到 DevOps 工程，在&lt;strong&gt;工程管理&lt;/strong&gt;下的&lt;strong&gt;凭证&lt;/strong&gt;页面创建以下凭证。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;凭证 ID&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;类型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;用途&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;dockerhub-id&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;帐户凭证&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Docker Hub&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;demo-kubeconfig&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;kubeconfig&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Kubernetes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;demo-kubeconfig&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591543502" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591543502.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;dockerhub-id&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591726548" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591726548.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;创建一个凭证 ID (&lt;code&gt;sonar-token&lt;/code&gt;)&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591882055" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591882055.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;列表中看到已创建的三个凭证。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623591917707" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623591917707.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;h3 id="创建流水线"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e6%b5%81%e6%b0%b4%e7%ba%bf" class="header-anchor"&gt;&lt;/a&gt;创建流水线&#10;&lt;/h3&gt;&lt;p&gt;在&lt;strong&gt;流水线&lt;/strong&gt;页面点击&lt;strong&gt;创建&lt;/strong&gt;，为了使用图形化流水线搭建，不在此处引用代码仓库，直接点击下一步&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623592917931" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623592917931.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;保持默认配置，点击创建&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623592981578" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623592981578.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;创建成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623592994758" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623592994758.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;进入流水线，点击编辑&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623593005853" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623593005853.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时选择CICD模板&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623593042443" class="gallery-image" data-flex-basis="438px" data-flex-grow="182" height="2100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623593042443.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;可视化编辑流水线&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623593102065" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623593102065.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;编辑后运行&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623593508711" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1572" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623593508711.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;流水线支持交互式操作&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623664726853" class="gallery-image" data-flex-basis="771px" data-flex-grow="321" height="1195" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623664726853.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;h2 id="在-kubesphere-控制台查看结果"&gt;&lt;a href="#%e5%9c%a8-kubesphere-%e6%8e%a7%e5%88%b6%e5%8f%b0%e6%9f%a5%e7%9c%8b%e7%bb%93%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;在 KubeSphere 控制台查看结果&#10;&lt;/h2&gt;&lt;p&gt;流水线执行成功后，即可查看到代码质量标签&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623664520315" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1573" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623664520315.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;sonar控制台也可以查看对应结果&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623664594650" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1573" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623664594650.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;jenkins视图&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623664630635" class="gallery-image" data-flex-basis="438px" data-flex-grow="182" height="2100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623664630635.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;blue ocean&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623664649276" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1573" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623664649276.png" width="1924"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623664672153" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="1573" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623664672153.png" width="1924"&gt;&lt;/p&gt;&#10;</description></item><item><title>Kubesphere安装——以GCP为例</title><link>https://blog.fjy8018.top/archives/272/</link><pubDate>Sat, 19 Jun 2021 22:15:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/272/</guid><description>&lt;h2 id="平台准备"&gt;&lt;a href="#%e5%b9%b3%e5%8f%b0%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;平台准备&#10;&lt;/h2&gt;&lt;p&gt;创建工作空间&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623574207829" class="gallery-image" data-flex-basis="334px" data-flex-grow="139" height="949" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623574207829.png" width="1321"&gt;&lt;/p&gt;&#10;&lt;p&gt;启用计算引擎API&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623574277108" class="gallery-image" data-flex-basis="344px" data-flex-grow="143" height="1171" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623574277108.png" width="1681"&gt;&lt;/p&gt;&#10;&lt;h2 id="准备虚拟机"&gt;&lt;a href="#%e5%87%86%e5%a4%87%e8%99%9a%e6%8b%9f%e6%9c%ba" class="header-anchor"&gt;&lt;/a&gt;准备虚拟机&#10;&lt;/h2&gt;&lt;p&gt;作为演示环境，此处使用Google Cloud Platform创建3台虚拟机，配置如下&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;CPU&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;内存&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;磁盘&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40G&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40G&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40G&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="创建实例模板"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e5%ae%9e%e4%be%8b%e6%a8%a1%e6%9d%bf" class="header-anchor"&gt;&lt;/a&gt;创建实例模板&#10;&lt;/h3&gt;&lt;p&gt;创建需要的实例模板&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623574362360" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/5c831a7d7681e5d9eaff.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置操作系统、资源等，注意放行防火墙&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623574465544" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/9d577af2fe0f8b8ac7e4.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="创建实例"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e5%ae%9e%e4%be%8b" class="header-anchor"&gt;&lt;/a&gt;创建实例&#10;&lt;/h3&gt;&lt;p&gt;基于实例模板创建3台虚拟机，选择地区为香港&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623574509743" class="gallery-image" data-flex-basis="1622px" data-flex-grow="676" height="568" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623574509743.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;此处用于演示用途，可选择无状态机器，机器删除后不会保留磁盘内容&lt;/p&gt;&#10;&lt;p&gt;注意关闭自动扩缩容&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623574573744" class="gallery-image" data-flex-basis="176px" data-flex-grow="73" height="2100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623574573744.png" width="1546"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623575054375" class="gallery-image" data-flex-basis="688px" data-flex-grow="286" height="1338" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623575054375.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;等待实例创建&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623575697993" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/c2438d50aaf14694217d.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;由于资源调度问题，最终只成功分配两台虚拟机，不过对于演示环境安装过程一样。&lt;/p&gt;&#10;&lt;h3 id="配置连接秘钥"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e8%bf%9e%e6%8e%a5%e7%a7%98%e9%92%a5" class="header-anchor"&gt;&lt;/a&gt;配置连接秘钥&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="1623574639897" class="gallery-image" data-flex-basis="438px" data-flex-grow="182" height="2100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623574639897.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;添加本地生成好的rsa秘钥即可&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623574692495" class="gallery-image" data-flex-basis="174px" data-flex-grow="72" height="2100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623574692495.png" width="1526"&gt;&lt;/p&gt;&#10;&lt;p&gt;本地SSH工具配置私钥即可连接&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623575916094" class="gallery-image" data-flex-basis="341px" data-flex-grow="142" height="1451" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623575916094.png" width="2065"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623575936073" class="gallery-image" data-flex-basis="341px" data-flex-grow="142" height="1451" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623575936073.png" width="2065"&gt;&lt;/p&gt;&#10;&lt;h2 id="前置环境准备"&gt;&lt;a href="#%e5%89%8d%e7%bd%ae%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;前置环境准备&#10;&lt;/h2&gt;&lt;h3 id="kubesphere建议前置项"&gt;&lt;a href="#kubesphere%e5%bb%ba%e8%ae%ae%e5%89%8d%e7%bd%ae%e9%a1%b9" class="header-anchor"&gt;&lt;/a&gt;kubesphere建议前置项&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;h3 id="节点要求"&gt;&lt;a href="#%e8%8a%82%e7%82%b9%e8%a6%81%e6%b1%82" class="header-anchor"&gt;&lt;/a&gt;节点要求&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;所有节点必须都能通过 &lt;code&gt;SSH&lt;/code&gt; 访问。&lt;/li&gt;&#10;&lt;li&gt;所有节点时间同步。&lt;/li&gt;&#10;&lt;li&gt;所有节点都应使用 &lt;code&gt;sudo&lt;/code&gt;/&lt;code&gt;curl&lt;/code&gt;/&lt;code&gt;openssl&lt;/code&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="依赖项要求"&gt;&lt;a href="#%e4%be%9d%e8%b5%96%e9%a1%b9%e8%a6%81%e6%b1%82" class="header-anchor"&gt;&lt;/a&gt;依赖项要求&#10;&lt;/h3&gt;&lt;p&gt;KubeKey 可以一同安装 Kubernetes 和 KubeSphere。根据要安装的 Kubernetes 版本，需要安装的依赖项可能会不同。您可以参考下表，查看是否需要提前在节点上安装相关依赖项。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;依赖项&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Kubernetes 版本 ≥ 1.18&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Kubernetes 版本 &amp;lt; 1.18&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;code&gt;socat&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;必须&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;可选，但建议安装&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;code&gt;conntrack&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;必须&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;可选，但建议安装&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;code&gt;ebtables&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;可选，但建议安装&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;可选，但建议安装&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;code&gt;ipset&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;可选，但建议安装&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;可选，但建议安装&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;以下内容所有节点都需要执行&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum install -y socat curl openssl conntrack ebtables ipset&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;主节点下载kubekey，由于使用google虚拟机，能正常访问google和github，故直接下载即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -sfL https://get-kk.kubesphere.io &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nv"&gt;VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;v1.1.0 sh -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ chmod +x kk&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;放行VPC防火墙&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623579543782" class="gallery-image" data-flex-basis="170px" data-flex-grow="71" height="2100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623579543782.png" width="1494"&gt;&lt;/p&gt;&#10;&lt;h2 id="创建集群"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e9%9b%86%e7%be%a4" class="header-anchor"&gt;&lt;/a&gt;创建集群&#10;&lt;/h2&gt;&lt;h3 id="服务器免密登陆"&gt;&lt;a href="#%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%85%8d%e5%af%86%e7%99%bb%e9%99%86" class="header-anchor"&gt;&lt;/a&gt;服务器免密登陆&#10;&lt;/h3&gt;&lt;p&gt;主节点生成免密登陆配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ssh-keygen -t rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generating public/private rsa key pair.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter file in which to save the key &lt;span class="o"&gt;(&lt;/span&gt;/root/.ssh/id_rsa&lt;span class="o"&gt;)&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created directory &lt;span class="s1"&gt;&amp;#39;/root/.ssh&amp;#39;&lt;/span&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter passphrase &lt;span class="o"&gt;(&lt;/span&gt;empty &lt;span class="k"&gt;for&lt;/span&gt; no passphrase&lt;span class="o"&gt;)&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter same passphrase again:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your identification has been saved in /root/.ssh/id_rsa.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your public key has been saved in /root/.ssh/id_rsa.pub.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The key fingerprint is:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SHA256:yxln4RFEXhsvIMcL0/EzF8CLUpo/hMlkM8KBDcNEjbU root@kubesphere-instance-group-1-bx5d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The key&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;s randomart image is:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+---&lt;span class="o"&gt;[&lt;/span&gt;RSA 2048&lt;span class="o"&gt;]&lt;/span&gt;----+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +&lt;span class="o"&gt;=&lt;/span&gt;Oo..&lt;span class="o"&gt;=&lt;/span&gt;Bo+.. &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +.&lt;span class="o"&gt;=&lt;/span&gt;.B++&lt;span class="o"&gt;=&lt;/span&gt;.+ . &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nv"&gt;E&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; @+o*.o &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; B.+o.&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; S++ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; . *o &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; + . &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+----&lt;span class="o"&gt;[&lt;/span&gt;SHA256&lt;span class="o"&gt;]&lt;/span&gt;-----+&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;所有主机允许公钥免密登陆&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/ssh/sshd_config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将下面配置改为yes并去掉注释&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PubkeyAuthentication yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PermitRootLogin yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ service sshd restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;控制台添加主节点公钥，则所有新建主机都能被主节点访问&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623576902639" class="gallery-image" data-flex-basis="421px" data-flex-grow="175" height="854" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623576902639.png" width="1501"&gt;&lt;/p&gt;&#10;&lt;h3 id="创建示例配置文件"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e7%a4%ba%e4%be%8b%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;创建示例配置文件&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$./kk create config --with-kubernetes v1.20.4 --with-kubesphere v3.1.0 -f gcp-config&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;按默认配置只安装控制台和基础服务&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubekey.kubesphere.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Cluster&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sample&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node1, address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;34.92.90.181, internalAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.170.0.5, privateKeyPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/root/.ssh/id_rsa&amp;#34;&lt;/span&gt;}&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node2, address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;35.220.138.230, internalAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.170.0.6, privateKeyPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/root/.ssh/id_rsa&amp;#34;&lt;/span&gt;}&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;roleGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;etcd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;node1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;node1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;node1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;node2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;controlPlaneEndpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;lb.kubesphere.local&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6443&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1.20.4&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;imageRepo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubesphere&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clusterName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cluster.local&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;calico&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubePodsCIDR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.233.64.0&lt;/span&gt;&lt;span class="l"&gt;/18&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubeServiceCIDR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.233.0.0&lt;/span&gt;&lt;span class="l"&gt;/18&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;registryMirrors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;insecureRegistries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;addons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;installer.kubesphere.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterConfiguration&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ks-installer&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubesphere-system&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v3.1.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;persistence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;authentication&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jwtSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;zone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;local_registry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;etcd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpointIps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;localhost &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2379&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tlsEnable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;common&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redisVolumSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openldap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openldapVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minioVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;20Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http://prometheus-operated.kubesphere-monitoring-system.svc:9090&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;es&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elasticsearchMasterVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;4Gi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elasticsearchDataVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;20Gi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logMaxAge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elkPrefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;logstash&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;basicAuth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;externalElasticsearchUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;externalElasticsearchPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;console&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enableMultiLogin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30880&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alerting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# thanosruler:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# replicas: 1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# resources: {}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;auditing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;devops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsMemoryLim&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsMemoryReq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1500Mi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;8Gi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_Xms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512m &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_Xmx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512m&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_MaxRAM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2g&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ruler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logsidecar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics_server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prometheusMemoryRequest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;400Mi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prometheusVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;20Gi &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multicluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clusterRole&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;none &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networkpolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ippool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;none&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;topology&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;none&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openpitrix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;store&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;servicemesh&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubeedge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudCore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="nt"&gt;&amp;#34;node-role.kubernetes.io/worker&amp;#34;: &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;}&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10000&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubQuicPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10001&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubHttpsPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10002&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudstreamPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10003&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tunnelPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10004&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudHub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;advertiseAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;100&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30000&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubQuicNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30001&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubHttpsNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30002&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudstreamNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30003&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tunnelNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30004&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edgeWatcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="nt"&gt;&amp;#34;node-role.kubernetes.io/worker&amp;#34;: &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;}&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edgeWatcherAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="nt"&gt;&amp;#34;node-role.kubernetes.io/worker&amp;#34;: &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;}&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="安装集群"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e9%9b%86%e7%be%a4" class="header-anchor"&gt;&lt;/a&gt;安装集群&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="1623578613894" class="gallery-image" data-flex-basis="657px" data-flex-grow="273" height="565" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623578613894.png" width="1548"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时，在虚拟机安装代理即可查看虚拟机监控&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623579284817" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/0dd005930909278cb808.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;创建完成&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623579607890" class="gallery-image" data-flex-basis="304px" data-flex-grow="126" height="1230" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623579607890.png" width="1558"&gt;&lt;/p&gt;&#10;&lt;p&gt;访问成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623579584535" class="gallery-image" data-flex-basis="956px" data-flex-grow="398" height="964" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623579584535.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;集群正常，不安装组件时内存占用率并不高&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623579689768" class="gallery-image" data-flex-basis="706px" data-flex-grow="294" height="1304" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623579689768.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;安装&lt;code&gt;kubectl&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum install -y kubectl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装可插拔组件"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e5%8f%af%e6%8f%92%e6%8b%94%e7%bb%84%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;安装可插拔组件&#10;&lt;/h2&gt;&lt;p&gt;点击&lt;strong&gt;自定义资源 CRD&lt;/strong&gt;，然后在搜索栏中输入 &lt;code&gt;clusterconfiguration&lt;/code&gt;，点击搜索结果进入其详情页面。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623579764558" class="gallery-image" data-flex-basis="783px" data-flex-grow="326" height="1176" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623579764558.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;按照自身需要启用可插拔组件，此处打开所有组件，即修改为如下配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;installer.kubesphere.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterConfiguration&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v3.1.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ks-installer&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubesphere-system&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alerting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;auditing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;authentication&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jwtSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;common&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;es&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;basicAuth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elasticsearchDataVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;20Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elasticsearchMasterVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;4Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elkPrefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;logstash&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;externalElasticsearchPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;externalElasticsearchUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logMaxAge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minioVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://prometheus-operated.kubesphere-monitoring-system.svc:9090&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openldap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openldapVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redisVolumSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;console&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enableMultiLogin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30880&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;devops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_MaxRAM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2g&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_Xms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512m&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsJavaOpts_Xmx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512m&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsMemoryLim&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsMemoryReq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1500Mi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jenkinsVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;8Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;etcd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpointIps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.170.0.5&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2379&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tlsEnable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ruler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubeedge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudCore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudHub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;advertiseAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;100&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubHttpsPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;10002&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;10000&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubQuicPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;10001&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudstreamPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;10003&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node-role.kubernetes.io/worker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubHttpsNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;30002&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;30000&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudhubQuicNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;30001&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cloudstreamNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;30003&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tunnelNodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;30004&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tunnelPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;10004&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edgeWatcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edgeWatcherAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node-role.kubernetes.io/worker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node-role.kubernetes.io/worker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logsidecar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics_server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prometheusMemoryRequest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;400Mi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prometheusVolumeSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;5Gi&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multicluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clusterRole&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;none&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ippool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;calico&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networkpolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;topology&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;weave-scope&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openpitrix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;store&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;persistence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;servicemesh&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过在线控制台，查看安装进度&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623580120458" class="gallery-image" data-flex-basis="270px" data-flex-grow="112" height="751" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623580120458.png" width="848"&gt;&lt;/p&gt;&#10;&lt;p&gt;执行以下命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl logs -n kubesphere-system &lt;span class="k"&gt;$(&lt;/span&gt;kubectl get pod -n kubesphere-system -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ks-install -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.items[0].metadata.name}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt; -f&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="1623580089627" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/e27887a4970faa223d7a.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;安装组件过程中，对CPU负载较大&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623580387124" class="gallery-image" data-flex-basis="775px" data-flex-grow="323" height="1188" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623580387124.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;所有组件安装完成&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623580751492" class="gallery-image" data-flex-basis="582px" data-flex-grow="242" height="1581" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623580751492.png" width="3840"&gt;&lt;/p&gt;&#10;&lt;p&gt;资源占用情况&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1623580770352" class="gallery-image" data-flex-basis="732px" data-flex-grow="305" height="1258" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1623580770352.png" width="3840"&gt;&lt;/p&gt;&#10;</description></item><item><title>Kubesphere运维Kubernetes集群</title><link>https://blog.fjy8018.top/archives/271/</link><pubDate>Sun, 23 May 2021 22:58:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/271/</guid><description>&lt;h2 id="背景"&gt;&lt;a href="#%e8%83%8c%e6%99%af" class="header-anchor"&gt;&lt;/a&gt;背景&#10;&lt;/h2&gt;&lt;p&gt;使用原生Kubernetes-dashboard和Grafana+Prometheus管理较大规模集群比较困难，有如下缺陷&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;每次执行命令都要登陆服务器&lt;/li&gt;&#10;&lt;li&gt;容器日志采集方案、监控方案搭建比较繁琐&lt;/li&gt;&#10;&lt;li&gt;添加节点不方便&lt;/li&gt;&#10;&lt;li&gt;管理存储插件、秘钥、配置不方便&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="解决方案"&gt;&lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="header-anchor"&gt;&lt;/a&gt;解决方案&#10;&lt;/h2&gt;&lt;p&gt;目前国内流行的k8s管理平台主要有rancher、kubesphere、kubeboard&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;rancher主打原生集群管理，侧重运维人员&lt;/li&gt;&#10;&lt;li&gt;kubesphere主打开发运维工作流，侧重研发人员&lt;/li&gt;&#10;&lt;li&gt;kubeboard与kubesphere类似，侧重微服务管理，但功能上较少，对多节点管理需要收费&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;经过评估，最终决定采用kubesphere进行集群管理&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.rancher.cn/" target="_blank" rel="noopener"&#10; &gt;Rancher&lt;/a&gt; — 多云混合云多集群Kubernetes管理平台&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Rancher" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.rancher.cn/imgs/rancher-logo-only-color.svg"&gt;&lt;/p&gt;&#10;&lt;p&gt;[post url=&amp;ldquo;https://kubesphere.io/zh/&amp;rdquo; title=&amp;ldquo;Kubesphere&amp;rdquo; intro=&amp;ldquo;面向云原生应用的&#10;容器混合云&amp;rdquo; cover=&amp;ldquo;https://kubesphere.io/images/logo.svg&amp;rdquo; /]&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://kuboard.cn/" target="_blank" rel="noopener"&#10; &gt;Kuboard&lt;/a&gt; — 快速在 Kubernetes 上落地微服务&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Kuboard" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="360" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kuboard.cn/favicon.png" width="360"&gt;&lt;/p&gt;&#10;&lt;h2 id="安装步骤"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;安装步骤&#10;&lt;/h2&gt;&lt;p&gt;目标是面对小规模集群管理，节点数最多为5个，故不考虑高可用集群配置，采用单主节点+4个worker节点配置&lt;/p&gt;&#10;&lt;p&gt;采用纯净CentOS 7 Linux系统，需要做以下前置准备&lt;/p&gt;&#10;&lt;h3 id="依赖包安装"&gt;&lt;a href="#%e4%be%9d%e8%b5%96%e5%8c%85%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;依赖包安装&#10;&lt;/h3&gt;&lt;p&gt;安装官方要求的依赖包，由于计划安装NFS存储插件，还需要安装nfs工具包&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum install -y socat conntrack ebtables ipset nfs-utils&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="配置dns解析"&gt;&lt;a href="#%e9%85%8d%e7%bd%aedns%e8%a7%a3%e6%9e%90" class="header-anchor"&gt;&lt;/a&gt;配置DNS解析&#10;&lt;/h3&gt;&lt;p&gt;将各节点DNS配置为私有DNS服务器&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ tee /etc/resolv.conf &lt;span class="s"&gt;&amp;lt;&amp;lt;-&amp;#39;EOF&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;# Generated by NetworkManager&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;nameserver 192.168.1.13&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;私有DNS搭建可以参考文章&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://blog.fjy8018.top/archives/270/" &gt;相关文章&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;[[利用Docker自建Dns服务器]]&lt;/p&gt;&#10;&lt;h3 id="按照官方教程安装多节点kubernetes"&gt;&lt;a href="#%e6%8c%89%e7%85%a7%e5%ae%98%e6%96%b9%e6%95%99%e7%a8%8b%e5%ae%89%e8%a3%85%e5%a4%9a%e8%8a%82%e7%82%b9kubernetes" class="header-anchor"&gt;&lt;/a&gt;按照官方教程安装多节点kubernetes&#10;&lt;/h3&gt;&lt;p&gt;强烈建议先用KubeKey安装纯净k8s集群+控制面板，关闭所有插件。等安装完毕再一个个插件打开，防止因为内存不够而无法打开kubesphere&lt;/p&gt;&#10;&lt;p&gt;安装步骤参考官方文档一键安装方式&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://kubesphere.io/zh/docs/installing-on-linux/introduction/multioverview/" target="_blank" rel="noopener"&#10; &gt;多节点安装&lt;/a&gt; — Kubesphere&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="多节点安装" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kubesphere.io/images/logo.svg"&gt;&lt;/p&gt;&#10;&lt;p&gt;启动成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780201562" class="gallery-image" data-flex-basis="401px" data-flex-grow="167" height="1341" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621780201562.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;启动成功后按照官方指南打开插件&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://kubesphere.io/zh/docs/quick-start/enable-pluggable-components/" target="_blank" rel="noopener"&#10; &gt;启用可插拔组件&lt;/a&gt; — Kubesphere&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="启用可插拔组件" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kubesphere.io/images/logo.svg"&gt;&lt;/p&gt;&#10;&lt;p&gt;所有插件打开后如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780327261" class="gallery-image" data-flex-basis="401px" data-flex-grow="167" height="1341" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621780327261.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;h2 id="使用"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;使用&#10;&lt;/h2&gt;&lt;p&gt;节点状态&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780183351" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/e7a1819a228946782bef.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;存储卷管理&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780136546" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="1343" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621780136546.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;监控告警&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780125428" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/8952d763193936f0e1b8.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;日志采集&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621779955406" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="1342" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621779955406.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;日志查询&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621779885484" class="gallery-image" data-flex-basis="401px" data-flex-grow="167" height="1339" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621779885484.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;操作审计&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621779560948" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="1342" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621779560948.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;工具箱&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621779548504" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="1343" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621779548504.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;企业空间权限控制&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621778981460" class="gallery-image" data-flex-basis="401px" data-flex-grow="167" height="1340" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621778981460.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;内置helm应用商店，支持上线审批，在线编辑等&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621778958150" class="gallery-image" data-flex-basis="401px" data-flex-grow="167" height="1339" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621778958150.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;支持关联外部仓库&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621778927223" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="1344" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621778927223.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621778901846" class="gallery-image" data-flex-basis="402px" data-flex-grow="167" height="1337" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621778901846.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;应用流量治理&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780422538" class="gallery-image" data-flex-basis="402px" data-flex-grow="167" height="1336" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621780422538.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;链路追踪&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780443725" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="1342" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621780443725.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;灰度发布&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621780461446" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="1342" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621780461446.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;费用统计&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1621781619162" class="gallery-image" data-flex-basis="283px" data-flex-grow="118" height="1899" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1621781619162.png" width="2241"&gt;&lt;/p&gt;&#10;&lt;p&gt;更多的使用场景包括：DevOps、边缘节点、多集群管理还在探索中&lt;/p&gt;&#10;</description></item><item><title>利用Docker自建DNS服务器</title><link>https://blog.fjy8018.top/archives/270/</link><pubDate>Sun, 09 May 2021 18:14:12 +0800</pubDate><guid>https://blog.fjy8018.top/archives/270/</guid><description>&lt;h2 id="背景"&gt;&lt;a href="#%e8%83%8c%e6%99%af" class="header-anchor"&gt;&lt;/a&gt;背景&#10;&lt;/h2&gt;&lt;p&gt;当Linux集群中机器不断增多，集群内通过配置&lt;code&gt;/hosts&lt;/code&gt;实现域名内网访问。&lt;/p&gt;&#10;&lt;p&gt;目标&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;相同域名在集群之外通过公有DNS访问外网地址&lt;/li&gt;&#10;&lt;li&gt;相同域名在集群内通过DNS解析访问内网地址&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="步骤"&gt;&lt;a href="#%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;步骤&#10;&lt;/h2&gt;&lt;h3 id="搭建dns服务器"&gt;&lt;a href="#%e6%90%ad%e5%bb%badns%e6%9c%8d%e5%8a%a1%e5%99%a8" class="header-anchor"&gt;&lt;/a&gt;搭建DNS服务器&#10;&lt;/h3&gt;&lt;p&gt;DNS服务器可以通过&lt;code&gt;jpillora/dnsmasq&lt;/code&gt;容器实现&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://hub.docker.com/r/jpillora/dnsmasq" target="_blank" rel="noopener"&#10; &gt;jpillora/dnsmasq&lt;/a&gt; — DockerHub&lt;/p&gt;&#10;&lt;p&gt;新增配置文件 &lt;code&gt;dnsmasq.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 完整配置文件参考以下地址&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# http://oss.segetech.com/intra/srv/dnsmasq.conf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 记录所有DNS查询请求&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;log-queries&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 不使用本地配置的域名解析器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;no-resolv&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 不使用本地hosts&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;no-hosts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置上游DNS服务器地址，用于解析国内域名&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;114.114.114.114&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置国际DNS服务器地址&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8.8.8.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strict-order&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置内网解析&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/gitlab.fjy8018.top/192.168.1.11&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置&lt;code&gt;docker-compose&lt;/code&gt;文件，DNS服务器默认通过53 udp端口解析，不建议修改53端口的外部地址&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3.5&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dnsmasq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jpillora/dnsmasq:1.1.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;dns-net&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;53&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;&lt;span class="l"&gt;/udp&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;5380&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./dnsmasq.conf:/etc/dnsmasq.conf&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;HTTP_USER=admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;HTTP_PASS=admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dns-net&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动服务即可&lt;/p&gt;&#10;&lt;p&gt;后续需要修改DNS解析只需要访问&lt;code&gt;5380&lt;/code&gt;的web UI界面即可动态调整&lt;/p&gt;&#10;&lt;h3 id="服务器指向新dns服务器"&gt;&lt;a href="#%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%8c%87%e5%90%91%e6%96%b0dns%e6%9c%8d%e5%8a%a1%e5%99%a8" class="header-anchor"&gt;&lt;/a&gt;服务器指向新DNS服务器&#10;&lt;/h3&gt;&lt;p&gt;将所有服务器&lt;code&gt;/etc/resolv.conf&lt;/code&gt;文件指向新DNS服务器地址&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ tee /etc/resolv.conf &lt;span class="s"&gt;&amp;lt;&amp;lt;-&amp;#39;EOF&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;# Generated by NetworkManager&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;nameserver 192.168.1.13&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="补充"&gt;&lt;a href="#%e8%a1%a5%e5%85%85" class="header-anchor"&gt;&lt;/a&gt;补充&#10;&lt;/h3&gt;&lt;p&gt;对于&lt;code&gt;kubernetes&lt;/code&gt;集群，由于集群内使用了&lt;code&gt;coredns&lt;/code&gt;和&lt;code&gt;nodelocaldns&lt;/code&gt;缓存服务，还需要重启两个dns服务组件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl -n kube-system rollout restart daemonset nodelocaldns&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl -n kube-system rollout restart deploy coredns&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>k8s监控平台搭建</title><link>https://blog.fjy8018.top/archives/220/</link><pubDate>Tue, 12 Nov 2019 21:33:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/220/</guid><description>&lt;h2 id="架构"&gt;&lt;a href="#%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;架构&#10;&lt;/h2&gt;&lt;p&gt;目前主流容器化监控平台采用&lt;code&gt;Prometheus&lt;/code&gt;+&lt;code&gt;Grafana&lt;/code&gt;架构，下图为&lt;code&gt;Prometheus&lt;/code&gt;架构图，可以主动发现各种指标和采集数据，实现&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;监控每个节点基础指标&lt;/li&gt;&#10;&lt;li&gt;监控每个容器基础指标&lt;/li&gt;&#10;&lt;li&gt;监控k8s集群组件基础指标&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img alt="Prometheus architecture" class="gallery-image" data-flex-basis="399px" data-flex-grow="166" height="811" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/architecture.png" width="1351"&gt;&lt;/p&gt;&#10;&lt;h2 id="基础环境"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;基础环境&#10;&lt;/h2&gt;&lt;p&gt;Kubernetes：v1.14.0&lt;/p&gt;&#10;&lt;p&gt;Docker：17.03.1-ce&lt;/p&gt;&#10;&lt;p&gt;机器数：$3 \times master + 2 \times worker$&lt;/p&gt;&#10;&lt;h2 id="部署"&gt;&lt;a href="#%e9%83%a8%e7%bd%b2" class="header-anchor"&gt;&lt;/a&gt;部署&#10;&lt;/h2&gt;&lt;h3 id="helm"&gt;&lt;a href="#helm" class="header-anchor"&gt;&lt;/a&gt;Helm&#10;&lt;/h3&gt;&lt;p&gt;Helm作为k8s平台软件包管理工具，结合prometheus-operator可以类似插件的方式快速搭建监控体系，Helm旗下包含charts项目，为软件包仓库&lt;/p&gt;&#10;&lt;p&gt;Helm官方仓库：&lt;a class="link" href="https://github.com/helm/helm" target="_blank" rel="noopener"&#10; &gt;https://github.com/helm/helm&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;charts官方仓库：&lt;a class="link" href="https://github.com/helm/charts" target="_blank" rel="noopener"&#10; &gt;https://github.com/helm/charts&lt;/a&gt;&lt;/p&gt;&#10;&lt;h4 id="安装helm"&gt;&lt;a href="#%e5%ae%89%e8%a3%85helm" class="header-anchor"&gt;&lt;/a&gt;安装Helm&#10;&lt;/h4&gt;&lt;p&gt;通过官方仓库查看目前最新版为v2.16.0，但由于仍有不稳定的情况，故不推荐该版本，原因可通过其issue查看&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://github.com/helm/helm/issues/6894" target="_blank" rel="noopener"&#10; &gt;No kind Job is registered for version batch/v1 #6894&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://github.com/polyaxon/polyaxon/issues/601" target="_blank" rel="noopener"&#10; &gt;Unable to Deploy on Polyaxon with helm v2.16.0 (No kind Job is registered for version batch/v1) #601&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img alt="1573557182761" class="gallery-image" data-flex-basis="286px" data-flex-grow="119" height="887" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573557182761.png" width="1060"&gt;&lt;/p&gt;&#10;&lt;p&gt;此处选择安装v2.15.2的版本，&lt;a class="link" href="https://github.com/helm/helm/releases/tag/v2.15.2" target="_blank" rel="noopener"&#10; &gt;下载页面&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;解压并放到可执行目录下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ tar -zxvf helm-v2.15.2-linux-amd64.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mv linux-amd64/helm /usr/local/bin/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="tiller安装"&gt;&lt;a href="#tiller%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;Tiller安装&#10;&lt;/h4&gt;&lt;p&gt;Tiller 是以 Deployment 方式部署在 Kubernetes 集群中的，由于国内网络原因，需要配置为阿里云镜像&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm repo update&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因为官方的镜像无法拉取，使用-i指定自己的镜像&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;创建TLS认证服务端&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.2 --tiller-tls-cert /etc/kubernetes/ssl/tiller001.pem --tiller-tls-key /etc/kubernetes/ssl/tiller001-key.pem --tls-ca-cert /etc/kubernetes/ssl/ca.pem --tiller-namespace kube-system --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="tiller授权"&gt;&lt;a href="#tiller%e6%8e%88%e6%9d%83" class="header-anchor"&gt;&lt;/a&gt;Tiller授权&#10;&lt;/h4&gt;&lt;p&gt;Tiller 需要访问ApiServer去对集群进行操作。目前的 Tiller 部署时默认没有定义授权的 ServiceAccount，这会导致访问 API Server 时被拒绝。所以我们需要明确为 Tiller 部署添加授权&lt;/p&gt;&#10;&lt;p&gt;创建ServiceAccount和创建角色绑定&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl create serviceaccount --namespace kube-system tiller&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole&lt;span class="o"&gt;=&lt;/span&gt;cluster-admin --serviceaccount&lt;span class="o"&gt;=&lt;/span&gt;kube-system:tiller&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="验证"&gt;&lt;a href="#%e9%aa%8c%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;验证&#10;&lt;/h4&gt;&lt;p&gt;查看Tiller的ServiceAccount，需要跟创建的名字一致：tiller&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get deploy --namespace kube-system tiller-deploy -o yaml&lt;span class="p"&gt;|&lt;/span&gt;grep serviceAccount&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; serviceAccount: tiller&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; serviceAccountName: tiller&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;验证pods&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl -n kube-system get pods&lt;span class="p"&gt;|&lt;/span&gt;grep tiller&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tiller-deploy-b6c45d5bc-jhntj 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 2d8h&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;验证版本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client: &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;version.Version&lt;span class="o"&gt;{&lt;/span&gt;SemVer:&lt;span class="s2"&gt;&amp;#34;v2.15.2&amp;#34;&lt;/span&gt;, GitCommit:&lt;span class="s2"&gt;&amp;#34;8dce272473e5f2a7bf58ce79bb5c3691db54c96b&amp;#34;&lt;/span&gt;, GitTreeState:&lt;span class="s2"&gt;&amp;#34;clean&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Server: &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;version.Version&lt;span class="o"&gt;{&lt;/span&gt;SemVer:&lt;span class="s2"&gt;&amp;#34;v2.15.2&amp;#34;&lt;/span&gt;, GitCommit:&lt;span class="s2"&gt;&amp;#34;8dce272473e5f2a7bf58ce79bb5c3691db54c96b&amp;#34;&lt;/span&gt;, GitTreeState:&lt;span class="s2"&gt;&amp;#34;clean&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="operator"&gt;&lt;a href="#operator" class="header-anchor"&gt;&lt;/a&gt;Operator&#10;&lt;/h3&gt;&lt;p&gt;可以自定义资源类型(CDR)结合自定义控制器实现&lt;/p&gt;&#10;&lt;p&gt;样例&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app.example.com/v1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;AppService&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-app&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:1.7.9&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30002&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="charts"&gt;&lt;a href="#charts" class="header-anchor"&gt;&lt;/a&gt;Charts&#10;&lt;/h3&gt;&lt;p&gt;charts项目下stable目录里存放所有软件包内容，由于其默认从多处镜像仓库中拉取镜像，可能存在网络问题，需结合实际情况修改镜像配置，手动安装软件包&lt;/p&gt;&#10;&lt;p&gt;推荐配置地址：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;quay.io&lt;/code&gt; 替换为 &lt;code&gt;quay.azk8s.cn&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;gcr.io/google-containers&lt;/code&gt; 替换为 &lt;code&gt;registry.cn-hangzhou.aliyuncs.com/google-containers&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;本次需要安装的软件包为&lt;code&gt;prometheus-operator&lt;/code&gt;，但其还包含多个依赖软件如下&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;grafana&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;kube-state-metrics&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;prometheus-node-exporter&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;若需要手动安装则需要按照整理目录如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;prometheus-operator/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── charts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── grafana&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── kube-state-metrics&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── prometheus-node-exporter&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="手动安装"&gt;&lt;a href="#%e6%89%8b%e5%8a%a8%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;手动安装&#10;&lt;/h3&gt;&lt;h4 id="etcd监控配置"&gt;&lt;a href="#etcd%e7%9b%91%e6%8e%a7%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;Etcd监控配置&#10;&lt;/h4&gt;&lt;p&gt;监控etcd需要额外配置，而且较为复杂，具体步骤如下&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;查看etcd在集群中的配置，由于本k8s集群基于kubeadm搭建，故etcd通过容器方式运行，查看方法&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 查看etcd所在pod名称&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get pod --all-namespaces &lt;span class="p"&gt;|&lt;/span&gt; grep etcd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system etcd-k8smaster1 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7d1h&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 展开etcd详细配置&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get pod -n kube-system etcd-k8smaster1 -o yaml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置内容查看其健康检查端点，&lt;code&gt;--listen-client-urls&lt;/code&gt;指明其监听在https端点，故需要配置安全证书才能访问&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes.io/config.hash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;6119961323d801d05a7dd23e429cda3f&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes.io/config.mirror&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;6119961323d801d05a7dd23e429cda3f&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes.io/config.seen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2019-11-05T19:17:28.480984831+08:00&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes.io/config.source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;file&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;creationTimestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2019-11-05T11:18:53Z&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;etcd&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;control-plane&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;etcd-k8smaster1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-system&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resourceVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;876368&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selfLink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/api/v1/namespaces/kube-system/pods/etcd-k8smaster1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;0ccf5e91-ffbe-11e9-a5d2-000c298872e2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;etcd&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;advertise-client-urls=https://192.168.1.15:2379&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;cert-file=/etc/kubernetes/pki/etcd/server.crt&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;client-cert-auth=true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;data-dir=/var/lib/etcd&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;initial-advertise-peer-urls=https://192.168.1.15:2380&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;initial-cluster=k8smaster1=https://192.168.1.15:2380&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;key-file=/etc/kubernetes/pki/etcd/server.key&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;listen-client-urls=https://127.0.0.1:2379,https://192.168.1.15:2379&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;listen-peer-urls=https://192.168.1.15:2380&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;name=k8smaster1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;peer-client-cert-auth=true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;peer-key-file=/etc/kubernetes/pki/etcd/peer.key&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;snapshot-count=10000&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;registry.cn-hangzhou.aliyuncs.com/imooc/etcd:3.3.10&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;imagePullPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;IfNotPresent&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;livenessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;...&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hostIP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192.168.1.15&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;...&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;配置安全证书&lt;/p&gt;&#10;&lt;p&gt;k8s创建etcd时会自动创建相关证书，当前集群版本为1.14，证书位于&lt;code&gt;/etc/kubernetes/pki/etcd/&lt;/code&gt;中&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ls /etc/kubernetes/pki/etcd/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ca.crt ca.key healthcheck-client.crt healthcheck-client.key peer.crt peer.key server.crt server.key&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以通过&lt;code&gt;curl&lt;/code&gt;命令加载证书测试能否访问健康检查端点&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -k --cert /etc/kubernetes/pki/etcd/healthcheck-client.crt --key /etc/kubernetes/pki/etcd/healthcheck-client.key https://192.168.1.15:2379/metrics&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若有如下输出则正常&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# HELP etcd_debugging_mvcc_db_compaction_keys_total Total number of db keys compacted.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# TYPE etcd_debugging_mvcc_db_compaction_keys_total counter&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd_debugging_mvcc_db_compaction_keys_total 1.030132e+06&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# HELP etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds Bucketed histogram of db compaction pause duration.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# TYPE etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds histogram&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd_debugging_mvcc_db_compaction_pause_duration_milliseconds_bucket&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;8&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;创建证书秘钥&lt;/p&gt;&#10;&lt;p&gt;关联三个证书文件，创建k8s访问秘钥，秘钥名称为&lt;code&gt;etcd-certs&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl create secret generic etcd-certs -n monitoring --from-file&lt;span class="o"&gt;=&lt;/span&gt;/etc/kubernetes/pki/etcd/ca.crt --from-file&lt;span class="o"&gt;=&lt;/span&gt;/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file&lt;span class="o"&gt;=&lt;/span&gt;/etc/kubernetes/pki/etcd/healthcheck-client.key&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;写入prometheus配置文件&lt;code&gt;values.yaml&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;注意，此处路径前缀固定写法为&lt;code&gt;/etc/prometheus/secrets/&lt;/code&gt;+秘钥名称+文件名称，若写错证书路径则无法在指标中查看到对应的&lt;code&gt;target&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;serviceMonitor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;## Scrape interval. If not set, the Prometheus default scrape interval is used.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;##&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;insecureSkipVerify&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;serverName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;caFile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/etc/prometheus/secrets/etcd-certs/ca.crt&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certFile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/etc/prometheus/secrets/etcd-certs/healthcheck-client.crt&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;keyFile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/etc/prometheus/secrets/etcd-certs/healthcheck-client.key&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;...&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h4 id="创建"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba" class="header-anchor"&gt;&lt;/a&gt;创建&#10;&lt;/h4&gt;&lt;p&gt;指定命名空间和文件目录，若命名空间不存在会自动创建&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm install /root/prometheus-operator/ --name k8s-prometheus --namespace monitoring&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;等待一段时间，输出如下则创建成功&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME: k8s-prometheus&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;LAST DEPLOYED: Tue Nov &lt;span class="m"&gt;12&lt;/span&gt; 20:27:18 &lt;span class="m"&gt;2019&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAMESPACE: monitoring&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;STATUS: DEPLOYED&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RESOURCES:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/Alertmanager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager &lt;span class="nv"&gt;33s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/ClusterRole&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-clusterrole 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator-psp 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus-psp 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psp-k8s-prometheus-kube-state-metrics 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psp-k8s-prometheus-prometheus-node-exporter &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/ClusterRoleBinding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-clusterrolebinding 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator-psp 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus-psp 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psp-k8s-prometheus-kube-state-metrics 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psp-k8s-prometheus-prometheus-node-exporter &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/ConfigMap&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME DATA AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-config-dashboards &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-test &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-apiserver &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-cluster-total &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-controller-manager &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-etcd &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-grafana-datasource &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s-coredns &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s-resources-cluster &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s-resources-namespace &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s-resources-node &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s-resources-pod &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s-resources-workload &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s-resources-workloads-namespace &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubelet &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-namespace-by-pod &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-namespace-by-workload &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-cluster-rsrc-use &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-rsrc-use &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-nodes &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-persistentvolumesusage &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-pod-total &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-pods &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-proxy &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-scheduler &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-statefulset &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-workload-total &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/DaemonSet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &amp;lt;none&amp;gt; &lt;span class="nv"&gt;33s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/Deployment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME READY UP-TO-DATE AVAILABLE AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana 1/1 &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics 1/1 &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator 1/1 &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;33s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/Pod&lt;span class="o"&gt;(&lt;/span&gt;related&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME READY STATUS RESTARTS AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-769d6dfb69-mtbdg 2/2 Running &lt;span class="m"&gt;0&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics-76b8ff78cd-kjxvl 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter-jqkvf 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter-jxpzm 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter-k8n6x 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter-kpjzk 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter-qc6kv 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator-5f894bc75d-kvkvs 2/2 Running &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;33s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/Prometheus&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus &lt;span class="nv"&gt;33s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/PrometheusRule&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-etcd 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-general.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-k8s.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-apiserver.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-prometheus-node-recording.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-scheduler.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-absent 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-apps 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-resources 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-storage 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-system 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-system-apiserver 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-system-controller-manager 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-system-kubelet 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubernetes-system-scheduler 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-network 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-time 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node.rules 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus-operator &lt;span class="nv"&gt;32s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/Role&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-test &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/RoleBinding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-test &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/Secret&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME TYPE DATA AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alertmanager-k8s-prometheus-prometheus-alertmanager Opaque &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana Opaque &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/Service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME TYPE CLUSTER-IP EXTERNAL-IP PORT&lt;span class="o"&gt;(&lt;/span&gt;S&lt;span class="o"&gt;)&lt;/span&gt; AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana ClusterIP 10.100.203.67 &amp;lt;none&amp;gt; 80/TCP 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics ClusterIP 10.98.35.173 &amp;lt;none&amp;gt; 8080/TCP 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager ClusterIP 10.97.189.252 &amp;lt;none&amp;gt; 9093/TCP 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-coredns ClusterIP None &amp;lt;none&amp;gt; 9153/TCP 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-controller-manager ClusterIP None &amp;lt;none&amp;gt; 10252/TCP 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-etcd ClusterIP None &amp;lt;none&amp;gt; 2379/TCP 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-proxy ClusterIP None &amp;lt;none&amp;gt; 10249/TCP 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-scheduler ClusterIP None &amp;lt;none&amp;gt; 10251/TCP 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter ClusterIP 10.100.146.95 &amp;lt;none&amp;gt; 9100/TCP 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator ClusterIP 10.105.23.58 &amp;lt;none&amp;gt; 8080/TCP,443/TCP 33s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus ClusterIP 10.99.7.136 &amp;lt;none&amp;gt; 9090/TCP &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/ServiceAccount&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME SECRETS AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-test &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator &lt;span class="m"&gt;1&lt;/span&gt; 34s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1/ServiceMonitor&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-apiserver 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-coredns 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-grafana 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-controller-manager 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-etcd 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-proxy 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-scheduler 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kube-state-metrics 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-kubelet 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus &lt;span class="nv"&gt;32s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1beta1/ClusterRole&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1beta1/ClusterRoleBinding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1beta1/MutatingWebhookConfiguration&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-admission &lt;span class="nv"&gt;33s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1beta1/PodSecurityPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana &lt;span class="nb"&gt;false&lt;/span&gt; RunAsAny RunAsAny RunAsAny RunAsAny &lt;span class="nb"&gt;false&lt;/span&gt; configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-test &lt;span class="nb"&gt;false&lt;/span&gt; RunAsAny RunAsAny RunAsAny RunAsAny &lt;span class="nb"&gt;false&lt;/span&gt; configMap,downwardAPI,emptyDir,projected,secret&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics &lt;span class="nb"&gt;false&lt;/span&gt; RunAsAny MustRunAsNonRoot MustRunAs MustRunAs &lt;span class="nb"&gt;false&lt;/span&gt; secret&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager &lt;span class="nb"&gt;false&lt;/span&gt; RunAsAny RunAsAny MustRunAs MustRunAs &lt;span class="nb"&gt;false&lt;/span&gt; configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter &lt;span class="nb"&gt;false&lt;/span&gt; RunAsAny RunAsAny MustRunAs MustRunAs &lt;span class="nb"&gt;false&lt;/span&gt; configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim,hostPath&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator &lt;span class="nb"&gt;false&lt;/span&gt; RunAsAny RunAsAny MustRunAs MustRunAs &lt;span class="nb"&gt;false&lt;/span&gt; configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus &lt;span class="nb"&gt;false&lt;/span&gt; RunAsAny RunAsAny MustRunAs MustRunAs &lt;span class="nb"&gt;false&lt;/span&gt; configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1beta1/Role&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1beta1/RoleBinding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana &lt;span class="nv"&gt;34s&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt;&amp;gt; v1beta1/ValidatingWebhookConfiguration&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-admission 32s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTES:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The Prometheus Operator has been installed. Check its status by running:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; kubectl --namespace monitoring get pods -l &lt;span class="s2"&gt;&amp;#34;release=k8s-prometheus&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Visit https://github.com/coreos/prometheus-operator &lt;span class="k"&gt;for&lt;/span&gt; instructions on how&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;to create &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; configure Alertmanager and Prometheus instances using the Operator.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="升级软件包"&gt;&lt;a href="#%e5%8d%87%e7%ba%a7%e8%bd%af%e4%bb%b6%e5%8c%85" class="header-anchor"&gt;&lt;/a&gt;升级软件包&#10;&lt;/h4&gt;&lt;p&gt;一般用于修改&lt;code&gt;yaml&lt;/code&gt;配置文件重载应用&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm upgrade k8s-prometheus /root/prometheus-operator/ -f /root/prometheus-operator/charts/grafana/values.yaml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="删除"&gt;&lt;a href="#%e5%88%a0%e9%99%a4" class="header-anchor"&gt;&lt;/a&gt;删除&#10;&lt;/h4&gt;&lt;p&gt;使用Helm的优势在于安装软件包和删除都非常方便，通过命令即可快速删除&lt;/p&gt;&#10;&lt;p&gt;普通删除，会放入回收站&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm delete k8s-prometheus&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;强制删除，不会放入回收站&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ helm delete k8s-prometheus --purge&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对于当前监控组件来说，删除后同时要删除&lt;code&gt;CRD&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get crd &lt;span class="p"&gt;|&lt;/span&gt; grep coreos&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;删除所有的&lt;code&gt;CRD&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl delete crd &lt;span class="k"&gt;$(&lt;/span&gt;kubectl get crd &lt;span class="p"&gt;|&lt;/span&gt; grep coreos &lt;span class="p"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="访问指标面板"&gt;&lt;a href="#%e8%ae%bf%e9%97%ae%e6%8c%87%e6%a0%87%e9%9d%a2%e6%9d%bf" class="header-anchor"&gt;&lt;/a&gt;访问指标面板&#10;&lt;/h2&gt;&lt;p&gt;由于当前集群配置了&lt;code&gt;ingress-nginx&lt;/code&gt;负载均衡，故新增两个配置文件即可访问Prometheus和Grafana&lt;/p&gt;&#10;&lt;p&gt;访问Grafana&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;extensions/v1beta1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;prom-grafana&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;monitoring&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;your.domain&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;serviceName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;k8s-prometheus-grafana&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;servicePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;访问Prometheus&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;extensions/v1beta1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;prometheus&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;monitoring&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;your.domain&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;serviceName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;k8s-prometheus-prometheus-prometheus&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;servicePort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="prometheus"&gt;&lt;a href="#prometheus" class="header-anchor"&gt;&lt;/a&gt;Prometheus&#10;&lt;/h3&gt;&lt;p&gt;访问Prometheus web站点，首页支持执行&lt;code&gt;PromeQL&lt;/code&gt;查询采集指标信息&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573563429972" class="gallery-image" data-flex-basis="756px" data-flex-grow="315" height="609" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573563429972.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;访问target可见所有指标采集器都处于正常状态&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573562831317" class="gallery-image" data-flex-basis="581px" data-flex-grow="242" height="742" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573562831317.png" width="1797"&gt;&lt;/p&gt;&#10;&lt;p&gt;访问监控与告警可查看所有告警规则&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573563374318" class="gallery-image" data-flex-basis="491px" data-flex-grow="204" height="937" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573563374318.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;h3 id="grafana"&gt;&lt;a href="#grafana" class="header-anchor"&gt;&lt;/a&gt;Grafana&#10;&lt;/h3&gt;&lt;p&gt;首次访问会要求登陆&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573563646221" class="gallery-image" data-flex-basis="491px" data-flex-grow="204" height="937" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573563646221.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;h4 id="查看用户名和密码"&gt;&lt;a href="#%e6%9f%a5%e7%9c%8b%e7%94%a8%e6%88%b7%e5%90%8d%e5%92%8c%e5%af%86%e7%a0%81" class="header-anchor"&gt;&lt;/a&gt;查看用户名和密码&#10;&lt;/h4&gt;&lt;p&gt;在&lt;code&gt;grafana&lt;/code&gt;软件包的&lt;code&gt;values.yaml&lt;/code&gt;配置中有如下描述，声明密码被存储在&lt;code&gt;k8s&lt;/code&gt;的secret中&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Administrator credentials when not using an existing secret (see below)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;adminUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# adminPassword: strongpassword&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Use an existing secret for the admin user.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;existingSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;userKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin-user&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;passwordKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin-password&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看监控命名空间的秘钥&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get secrets -n monitoring&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME TYPE DATA AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alertmanager-k8s-prometheus-prometheus-alertmanager Opaque &lt;span class="m"&gt;1&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;default-token-hrhgk kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 2d10h&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd-certs Opaque &lt;span class="m"&gt;3&lt;/span&gt; 2d8h&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana Opaque &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-test-token-nnnvk kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-grafana-token-cdw2n kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-kube-state-metrics-token-6rxp4 kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-admission Opaque &lt;span class="m"&gt;3&lt;/span&gt; 2d10h&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-alertmanager-token-hxqm9 kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-node-exporter-token-vjrcs kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-operator-token-bkhrb kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-prometheus-prometheus-prometheus-token-wf2v6 kubernetes.io/service-account-token &lt;span class="m"&gt;3&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;prometheus-k8s-prometheus-prometheus-prometheus Opaque &lt;span class="m"&gt;1&lt;/span&gt; 37m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;prometheus-k8s-prometheus-prometheus-prometheus-tls-assets Opaque &lt;span class="m"&gt;0&lt;/span&gt; 34m&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;k8s-prometheus-grafana &lt;/code&gt;即目标秘钥，展示其详情&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get secrets -n monitoring k8s-prometheus-grafana -o yaml&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;data:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; admin-password: &lt;span class="nv"&gt;b3BlcmF0b3ItYWRtaW4&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; admin-user: &lt;span class="nv"&gt;cm9vdA&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ldap-toml: &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: Secret&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; creationTimestamp: &lt;span class="s2"&gt;&amp;#34;2019-11-12T12:27:55Z&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; labels:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; app: grafana&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; chart: grafana-4.0.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; heritage: Tiller&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; release: k8s-prometheus&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: k8s-prometheus-grafana&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; namespace: monitoring&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; resourceVersion: &lt;span class="s2"&gt;&amp;#34;1033230&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; selfLink: /api/v1/namespaces/monitoring/secrets/k8s-prometheus-grafana&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; uid: da7e86d0-0547-11ea-a5d2-000c298872e2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;type: Opaque&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;秘钥默认通过&lt;code&gt;Base64&lt;/code&gt; 加密，通过在线网站对该&lt;code&gt;Base64&lt;/code&gt;解密即可得到用户名和密码&lt;/p&gt;&#10;&lt;p&gt;登录后可查看&lt;code&gt;Grafana&lt;/code&gt;已经被配置好的多种可视化面板提供指标展示&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573563198155" class="gallery-image" data-flex-basis="633px" data-flex-grow="264" height="414" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573563198155.png" width="1093"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击左上角即可查看已经配置好的指标展示面板&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573563283684" class="gallery-image" data-flex-basis="214px" data-flex-grow="89" height="815" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573563283684.png" width="727"&gt;&lt;/p&gt;&#10;&lt;p&gt;Etcd监控面板&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573563299117" class="gallery-image" data-flex-basis="493px" data-flex-grow="205" height="929" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573563299117.png" width="1912"&gt;&lt;/p&gt;&#10;&lt;p&gt;节点监控&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573564479823" class="gallery-image" data-flex-basis="491px" data-flex-grow="204" height="937" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573564479823.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;计算资源监控&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1573564530686" class="gallery-image" data-flex-basis="491px" data-flex-grow="204" height="937" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1573564530686.png" width="1920"&gt;&lt;/p&gt;&#10;</description></item><item><title>Kubernetes 集群搭建</title><link>https://blog.fjy8018.top/archives/217/</link><pubDate>Sun, 20 Oct 2019 12:31:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/217/</guid><description>&lt;img src="https://s2.ax1x.com/2019/11/27/QCRTo9.jpg" alt="Featured image of post Kubernetes 集群搭建" /&gt;&lt;h2 id="搭建方法分类"&gt;&lt;a href="#%e6%90%ad%e5%bb%ba%e6%96%b9%e6%b3%95%e5%88%86%e7%b1%bb" class="header-anchor"&gt;&lt;/a&gt;搭建方法分类&#10;&lt;/h2&gt;&lt;p&gt;如果是搭建&lt;code&gt;Kubernetes&lt;/code&gt;的学习环境，则可以直接使用&lt;code&gt;minikube&lt;/code&gt;快速搭建单节点的&lt;code&gt;Kubernetes&lt;/code&gt;环境，官方推荐使用kubeadm搭建&lt;code&gt;Kubernetes&lt;/code&gt;集群生产环境&lt;/p&gt;&#10;&lt;p&gt;但kubeadm需要连接谷歌容器仓库获取镜像，在网络受限的情况下无法搭建成功，故有两种搭建方法：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;服务器使用代理，代理所有的&lt;code&gt;http&lt;/code&gt;和&lt;code&gt;https&lt;/code&gt;连接，可以自由访问任意地址&lt;/li&gt;&#10;&lt;li&gt;使用阿里云镜像地址&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;本次采用第二种方式进行搭建&lt;/p&gt;&#10;&lt;h2 id="环境准备"&gt;&lt;a href="#%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;环境准备&#10;&lt;/h2&gt;&lt;p&gt;本次宿主机为&lt;code&gt;CentOS 7&lt;/code&gt;，结合3台&lt;code&gt;virtual box&lt;/code&gt;虚拟机模拟集群环境，虚拟机使用&lt;code&gt;Vagrant&lt;/code&gt;进行管理，&lt;code&gt;vagrant&lt;/code&gt;安装比较简单，此处不再赘述&lt;/p&gt;&#10;&lt;p&gt;宿主机配置：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CPU：4C&lt;/li&gt;&#10;&lt;li&gt;RAM：8G&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="虚拟机配置"&gt;&lt;a href="#%e8%99%9a%e6%8b%9f%e6%9c%ba%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;虚拟机配置&#10;&lt;/h2&gt;&lt;p&gt;由于网络受限，&lt;code&gt;vagrant&lt;/code&gt;默认拉取的操作系统文件地址不可访问，需要自行从官方下载镜像或者使用代理下载镜像，此处对此操作也不再赘述&lt;/p&gt;&#10;&lt;p&gt;三台虚拟机配置文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -*- mode: ruby -*-&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# vi: set ft=ruby :&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;require_version&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;gt;= 1.6.0&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;boxes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;k8s-master&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:eth1&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;192.168.205.120&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:mem&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2048&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:cpu&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;k8s-node1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:eth1&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;192.168.205.121&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:mem&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2048&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:cpu&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;k8s-node2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:eth1&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;192.168.205.122&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:mem&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2048&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:cpu&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;centos/7&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;boxes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;vmware_fusion&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vmx&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;memsize&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:mem&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vmx&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;numvcpus&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:cpu&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;virtualbox&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customize&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;modifyvm&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;--memory&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:mem&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customize&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;modifyvm&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;--cpus&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:cpu&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt; &lt;span class="ss"&gt;:private_network&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:eth1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provision&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;shell&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./setup.sh&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;所有虚拟机启动后都会执行&lt;code&gt;./setup.sh&lt;/code&gt;脚本配置基础环境，脚本内容如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#/bin/sh&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum install -y vim telnet bind-utils wget yum-utils&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum-config-manager &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --add-repo &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://download.docker.com/linux/centos/docker-ce.repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum -y install docker-ce-18.09.8 docker-ce-cli-18.09.8 containerd.io&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; ! &lt;span class="k"&gt;$(&lt;/span&gt;getent group docker&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;then&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo groupadd docker&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker user group already exists&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo gpasswd -a &lt;span class="nv"&gt;$USER&lt;/span&gt; docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# open password auth for backup if ssh key doesn&amp;#39;t work, bydefault, username=vagrant password=vagrant&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &lt;span class="s1"&gt;&amp;#39;s/PasswordAuthentication no/PasswordAuthentication yes/g&amp;#39;&lt;/span&gt; /etc/ssh/sshd_config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart sshd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudomkdir /etc/yum.repos.d/bak &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudowget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudowget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum clean all &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; yum makecache&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo bash -c &lt;span class="s1"&gt;&amp;#39;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/yum.repos.d/kubernetes.repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;[kubernetes]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;name=Kubernetes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;enabled=1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;gpgcheck=1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;repo_gpgcheck=1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;EOF&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir -p /etc/docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee /etc/docker/daemon.json &lt;span class="s"&gt;&amp;lt;&amp;lt;-&amp;#39;EOF&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;registry-mirrors&amp;#34;: [&amp;#34;https://clayphwh.mirror.aliyuncs.com&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl daemon-reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo setenforce &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum install -y kubelet kubeadm kubectl&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo bash -c &lt;span class="s1"&gt;&amp;#39;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/sysctl.d/k8s.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;net.bridge.bridge-nf-call-ip6tables = 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;net.bridge.bridge-nf-call-iptables = 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;net.ipv4.ip_forward=1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;EOF&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sysctl --system&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl stop firewalld&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl disable firewalld&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo swapoff -a&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; docker.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; kubelet.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;脚本内已将K8S镜像均配置为阿里云镜像仓库，并配置了阿里云容器加速服务地址，更便于在国内拉取镜像&lt;/p&gt;&#10;&lt;h2 id="启动虚拟机"&gt;&lt;a href="#%e5%90%af%e5%8a%a8%e8%99%9a%e6%8b%9f%e6%9c%ba" class="header-anchor"&gt;&lt;/a&gt;启动虚拟机&#10;&lt;/h2&gt;&lt;p&gt;使用命令启动虚拟机&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vagrant up&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动需要较长时间，若出现大量超时也请耐心等待&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Loaded plugins: fastestmirror&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Loading mirror speeds from cached hostfile&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * base: mirrors.aliyun.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * extras: mirrors.163.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * updates: mirrors.163.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://vault.centos.org/7.1.1503/os/x86_64/repodata/0e6e90965f55146ba5025ea450f822d1bb0267d0299ef64dd4365825e6bad995-c7-x86_64-comps.xml.gz: &lt;span class="o"&gt;[&lt;/span&gt;Errno 12&lt;span class="o"&gt;]&lt;/span&gt; Timeout on http://vault.centos.org/7.1.1503/os/x86_64/repodata/0e6e90965f55146ba5025ea450f822d1bb0267d0299ef64dd4365825e6bad995-c7-x86_64-comps.xml.gz: &lt;span class="o"&gt;(&lt;/span&gt;28, &lt;span class="s1"&gt;&amp;#39;Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Trying other mirror.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://vault.centos.org/7.1.1503/updates/x86_64/repodata/93b71f445d2ec2138d28152612f4fb29c8e76ee31f2666b964d88249b4e0a955-primary.sqlite.bz2: &lt;span class="o"&gt;[&lt;/span&gt;Errno 12&lt;span class="o"&gt;]&lt;/span&gt; Timeout on http://vault.centos.org/7.1.1503/updates/x86_64/repodata/93b71f445d2ec2138d28152612f4fb29c8e76ee31f2666b964d88249b4e0a955-primary.sqlite.bz2: &lt;span class="o"&gt;(&lt;/span&gt;28, &lt;span class="s1"&gt;&amp;#39;Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Trying other mirror.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://vault.centos.org/7.2.1511/os/x86_64/repodata/c6411f1cc8a000ed2b651b49134631d279abba1ec1f78e5dcca79a52d8c1eada-primary.sqlite.bz2: &lt;span class="o"&gt;[&lt;/span&gt;Errno 12&lt;span class="o"&gt;]&lt;/span&gt; Timeout on http://vault.centos.org/7.2.1511/os/x86_64/repodata/c6411f1cc8a000ed2b651b49134631d279abba1ec1f78e5dcca79a52d8c1eada-primary.sqlite.bz2: &lt;span class="o"&gt;(&lt;/span&gt;28, &lt;span class="s1"&gt;&amp;#39;Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Trying other mirror.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动完成后通过命令查看虚拟机状态&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vagrant status&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Current machine states:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-master running &lt;span class="o"&gt;(&lt;/span&gt;virtualbox&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-node1 running &lt;span class="o"&gt;(&lt;/span&gt;virtualbox&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k8s-node2 running &lt;span class="o"&gt;(&lt;/span&gt;virtualbox&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This environment represents multiple VMs. The VMs are all listed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;above with their current state. For more information about a specific&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VM, run &lt;span class="sb"&gt;`&lt;/span&gt;vagrant status NAME&lt;span class="sb"&gt;`&lt;/span&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="k8s-master节点初始化"&gt;&lt;a href="#k8s-master%e8%8a%82%e7%82%b9%e5%88%9d%e5%a7%8b%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;K8S master节点初始化&#10;&lt;/h2&gt;&lt;p&gt;进入主节点，查看环境是否已经配置完成&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vagrant ssh k8s-master&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行以下三条语句查看是否有预期输出&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ sudo which kubeadm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/bin/kubeadm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ sudo which kubelet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/bin/kubelet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ sudo which kubectl&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/bin/kubectl&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ sudo docker version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: 18.09.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; API version: 1.39&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Go version: go1.10.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Git commit: 0dd43dd87f&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Built: Wed Jul &lt;span class="m"&gt;17&lt;/span&gt; 17:40:31 &lt;span class="m"&gt;2019&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OS/Arch: linux/amd64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Experimental: &lt;span class="nb"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Server: Docker Engine - Community&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Engine:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: 18.09.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; API version: 1.39 &lt;span class="o"&gt;(&lt;/span&gt;minimum version 1.12&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Go version: go1.10.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Git commit: 0dd43dd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Built: Wed Jul &lt;span class="m"&gt;17&lt;/span&gt; 17:10:42 &lt;span class="m"&gt;2019&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OS/Arch: linux/amd64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Experimental: &lt;span class="nb"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用初始化命令，并指定拉取镜像地址为阿里云地址，同时指定容器网络地址和注册中心广播地址&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo kubeadm init --pod-network-cidr 172.100.0.0/16 --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address 192.168.205.120&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出如下即初始化完成&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo kubeadm init --pod-network-cidr 172.100.0.0/16 --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address 192.168.205.120&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;W1020 01:31:27.560129 &lt;span class="m"&gt;20473&lt;/span&gt; version.go:101&lt;span class="o"&gt;]&lt;/span&gt; could not fetch a &lt;span class="sb"&gt;`&lt;/span&gt;Kubernetes&lt;span class="sb"&gt;`&lt;/span&gt;version from the internet: unable to get URL &lt;span class="s2"&gt;&amp;#34;https://dl.k8s.io/release/stable-1.txt&amp;#34;&lt;/span&gt;: Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled &lt;span class="k"&gt;while&lt;/span&gt; waiting &lt;span class="k"&gt;for&lt;/span&gt; connection &lt;span class="o"&gt;(&lt;/span&gt;Client.Timeout exceeded &lt;span class="k"&gt;while&lt;/span&gt; awaiting headers&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;W1020 01:31:27.560713 &lt;span class="m"&gt;20473&lt;/span&gt; version.go:102&lt;span class="o"&gt;]&lt;/span&gt; falling back to the &lt;span class="nb"&gt;local&lt;/span&gt; client version: v1.16.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;init&lt;span class="o"&gt;]&lt;/span&gt; Using &lt;span class="sb"&gt;`&lt;/span&gt;Kubernetes&lt;span class="sb"&gt;`&lt;/span&gt;version: v1.16.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;preflight&lt;span class="o"&gt;]&lt;/span&gt; Running pre-flight checks&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;WARNING IsDockerSystemdCheck&lt;span class="o"&gt;]&lt;/span&gt;: detected &lt;span class="s2"&gt;&amp;#34;cgroupfs&amp;#34;&lt;/span&gt; as the Docker cgroup driver. The recommended driver is &lt;span class="s2"&gt;&amp;#34;systemd&amp;#34;&lt;/span&gt;. Please follow the guide at https://kubernetes.io/docs/setup/cri/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;preflight&lt;span class="o"&gt;]&lt;/span&gt; Pulling images required &lt;span class="k"&gt;for&lt;/span&gt; setting up a &lt;span class="sb"&gt;`&lt;/span&gt;Kubernetes&lt;span class="sb"&gt;`&lt;/span&gt;cluster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;preflight&lt;span class="o"&gt;]&lt;/span&gt; This might take a minute or two, depending on the speed of your internet connection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;preflight&lt;span class="o"&gt;]&lt;/span&gt; You can also perform this action in beforehand using &lt;span class="s1"&gt;&amp;#39;kubeadm config images pull&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Writing kubelet environment file with flags to file &lt;span class="s2"&gt;&amp;#34;/var/lib/kubelet/kubeadm-flags.env&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Writing kubelet configuration to file &lt;span class="s2"&gt;&amp;#34;/var/lib/kubelet/config.yaml&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Activating the kubelet service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Using certificateDir folder &lt;span class="s2"&gt;&amp;#34;/etc/kubernetes/pki&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;ca&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;apiserver&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; apiserver serving cert is signed &lt;span class="k"&gt;for&lt;/span&gt; DNS names &lt;span class="o"&gt;[&lt;/span&gt;k8s-master &lt;span class="sb"&gt;`&lt;/span&gt;kubernetes&lt;span class="sb"&gt;`&lt;/span&gt;kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local&lt;span class="o"&gt;]&lt;/span&gt; and IPs &lt;span class="o"&gt;[&lt;/span&gt;10.96.0.1 192.168.205.120&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;apiserver-kubelet-client&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;front-proxy-ca&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;front-proxy-client&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;etcd/ca&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;etcd/server&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; etcd/server serving cert is signed &lt;span class="k"&gt;for&lt;/span&gt; DNS names &lt;span class="o"&gt;[&lt;/span&gt;k8s-master localhost&lt;span class="o"&gt;]&lt;/span&gt; and IPs &lt;span class="o"&gt;[&lt;/span&gt;192.168.205.120 127.0.0.1 ::1&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;etcd/peer&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; etcd/peer serving cert is signed &lt;span class="k"&gt;for&lt;/span&gt; DNS names &lt;span class="o"&gt;[&lt;/span&gt;k8s-master localhost&lt;span class="o"&gt;]&lt;/span&gt; and IPs &lt;span class="o"&gt;[&lt;/span&gt;192.168.205.120 127.0.0.1 ::1&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;etcd/healthcheck-client&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;apiserver-etcd-client&amp;#34;&lt;/span&gt; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;certs&lt;span class="o"&gt;]&lt;/span&gt; Generating &lt;span class="s2"&gt;&amp;#34;sa&amp;#34;&lt;/span&gt; key and public key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubeconfig&lt;span class="o"&gt;]&lt;/span&gt; Using kubeconfig folder &lt;span class="s2"&gt;&amp;#34;/etc/kubernetes&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubeconfig&lt;span class="o"&gt;]&lt;/span&gt; Writing &lt;span class="s2"&gt;&amp;#34;admin.conf&amp;#34;&lt;/span&gt; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubeconfig&lt;span class="o"&gt;]&lt;/span&gt; Writing &lt;span class="s2"&gt;&amp;#34;kubelet.conf&amp;#34;&lt;/span&gt; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubeconfig&lt;span class="o"&gt;]&lt;/span&gt; Writing &lt;span class="s2"&gt;&amp;#34;controller-manager.conf&amp;#34;&lt;/span&gt; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubeconfig&lt;span class="o"&gt;]&lt;/span&gt; Writing &lt;span class="s2"&gt;&amp;#34;scheduler.conf&amp;#34;&lt;/span&gt; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;control-plane&lt;span class="o"&gt;]&lt;/span&gt; Using manifest folder &lt;span class="s2"&gt;&amp;#34;/etc/kubernetes/manifests&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;control-plane&lt;span class="o"&gt;]&lt;/span&gt; Creating static Pod manifest &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kube-apiserver&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;control-plane&lt;span class="o"&gt;]&lt;/span&gt; Creating static Pod manifest &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kube-controller-manager&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;control-plane&lt;span class="o"&gt;]&lt;/span&gt; Creating static Pod manifest &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kube-scheduler&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;etcd&lt;span class="o"&gt;]&lt;/span&gt; Creating static Pod manifest &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;local&lt;/span&gt; etcd in &lt;span class="s2"&gt;&amp;#34;/etc/kubernetes/manifests&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;wait-control-plane&lt;span class="o"&gt;]&lt;/span&gt; Waiting &lt;span class="k"&gt;for&lt;/span&gt; the kubelet to boot up the control plane as static Pods from directory &lt;span class="s2"&gt;&amp;#34;/etc/kubernetes/manifests&amp;#34;&lt;/span&gt;. This can take up to 4m0s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-check&lt;span class="o"&gt;]&lt;/span&gt; Initial timeout of 40s passed.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;apiclient&lt;span class="o"&gt;]&lt;/span&gt; All control plane components are healthy after 59.511578 seconds&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;upload-config&lt;span class="o"&gt;]&lt;/span&gt; Storing the configuration used in ConfigMap &lt;span class="s2"&gt;&amp;#34;kubeadm-config&amp;#34;&lt;/span&gt; in the &lt;span class="s2"&gt;&amp;#34;kube-system&amp;#34;&lt;/span&gt; Namespace&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet&lt;span class="o"&gt;]&lt;/span&gt; Creating a ConfigMap &lt;span class="s2"&gt;&amp;#34;kubelet-config-1.16&amp;#34;&lt;/span&gt; in namespace kube-system with the configuration &lt;span class="k"&gt;for&lt;/span&gt; the kubelets in the cluster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;upload-certs&lt;span class="o"&gt;]&lt;/span&gt; Skipping phase. Please see --upload-certs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;mark-control-plane&lt;span class="o"&gt;]&lt;/span&gt; Marking the node k8s-master as control-plane by adding the label &lt;span class="s2"&gt;&amp;#34;node-role.kubernetes.io/master=&amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;mark-control-plane&lt;span class="o"&gt;]&lt;/span&gt; Marking the node k8s-master as control-plane by adding the taints &lt;span class="o"&gt;[&lt;/span&gt;node-role.kubernetes.io/master:NoSchedule&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;bootstrap-token&lt;span class="o"&gt;]&lt;/span&gt; Using token: rod570.p67pymzbil4m6u8d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;bootstrap-token&lt;span class="o"&gt;]&lt;/span&gt; Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;bootstrap-token&lt;span class="o"&gt;]&lt;/span&gt; configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order &lt;span class="k"&gt;for&lt;/span&gt; nodes to get long term certificate credentials&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;bootstrap-token&lt;span class="o"&gt;]&lt;/span&gt; configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;bootstrap-token&lt;span class="o"&gt;]&lt;/span&gt; configured RBAC rules to allow certificate rotation &lt;span class="k"&gt;for&lt;/span&gt; all node client certificates in the cluster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;bootstrap-token&lt;span class="o"&gt;]&lt;/span&gt; Creating the &lt;span class="s2"&gt;&amp;#34;cluster-info&amp;#34;&lt;/span&gt; ConfigMap in the &lt;span class="s2"&gt;&amp;#34;kube-public&amp;#34;&lt;/span&gt; namespace&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;addons&lt;span class="o"&gt;]&lt;/span&gt; Applied essential addon: CoreDNS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;addons&lt;span class="o"&gt;]&lt;/span&gt; Applied essential addon: kube-proxy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your &lt;span class="sb"&gt;`&lt;/span&gt;Kubernetes&lt;span class="sb"&gt;`&lt;/span&gt;control-plane has initialized successfully!&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To start using your cluster, you need to run the following as a regular user:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdir -p &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo cp -i /etc/kubernetes/admin.conf &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo chown &lt;span class="k"&gt;$(&lt;/span&gt;id -u&lt;span class="k"&gt;)&lt;/span&gt;:&lt;span class="k"&gt;$(&lt;/span&gt;id -g&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You should now deploy a pod network to the cluster.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Run &lt;span class="s2"&gt;&amp;#34;kubectl apply -f [podnetwork].yaml&amp;#34;&lt;/span&gt; with one of the options listed at:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://kubernetes.io/docs/concepts/cluster-administration/addons/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Then you can join any number of worker nodes by running the following on each as root:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubeadm join 192.168.205.120:6443 --token rod570.p67pymzbil4m6u8d &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --discovery-token-ca-cert-hash sha256:8f4cb9d555c78d58befeb3cfa3f7537989aa599e53e4f1bae929d8cc7afd1476&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kubectl-配置"&gt;&lt;a href="#kubectl-%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;kubectl 配置&#10;&lt;/h2&gt;&lt;p&gt;拷贝kubectl配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ rm -rf ~/.kube&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mkdir -p &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo cp -i /etc/kubernetes/admin.conf &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo chown &lt;span class="k"&gt;$(&lt;/span&gt;id -u&lt;span class="k"&gt;)&lt;/span&gt;:&lt;span class="k"&gt;$(&lt;/span&gt;id -g&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若不配置直接使用则报无法连接错误&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ kubectl get pod --all-namespaces&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The connection to the server localhost:8080 was refused - did you specify the right host or port?&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时使用&lt;code&gt;kubectl&lt;/code&gt;可查看k8s容器运行情况，输出如下则为初始化成功，启动由于未配置网络插件，故&lt;code&gt;coredns&lt;/code&gt;一直处于&lt;code&gt;Pending&lt;/code&gt;状态&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ kubectl get pod --all-namespaces&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAMESPACE NAME READY STATUS RESTARTS AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-c297b 0/1 Pending &lt;span class="m"&gt;0&lt;/span&gt; 81s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-spzhj 0/1 Pending &lt;span class="m"&gt;0&lt;/span&gt; 81s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system etcd-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 39s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-apiserver-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 49s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-controller-manager-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 40s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-xlb62 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 81s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-scheduler-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 51s&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装网络插件"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e7%bd%91%e7%bb%9c%e6%8f%92%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;安装网络插件&#10;&lt;/h2&gt;&lt;p&gt;网络插件有多个可选，可通过&lt;a class="link" href="https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network" target="_blank" rel="noopener"&#10; &gt;官网&lt;/a&gt;查看，此处选择安装&lt;code&gt;flannel&lt;/code&gt; CNI网络插件&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;For &lt;code&gt;flannel&lt;/code&gt; to work correctly, you must pass &lt;code&gt;--pod-network-cidr=10.244.0.0/16&lt;/code&gt; to &lt;code&gt;kubeadm init&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Set &lt;code&gt;/proc/sys/net/bridge/bridge-nf-call-iptables&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt; by running &lt;code&gt;sysctl net.bridge.bridge-nf-call-iptables=1&lt;/code&gt; to pass bridged IPv4 traffic to iptables’ chains. This is a requirement for some CNI plugins to work, for more information please see &lt;a class="link" href="https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements" target="_blank" rel="noopener"&#10; &gt;here&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Make sure that your firewall rules allow UDP ports 8285 and 8472 traffic for all hosts participating in the overlay network. see &lt;a class="link" href="https://coreos.com/flannel/docs/latest/troubleshooting.html#firewalls" target="_blank" rel="noopener"&#10; &gt;here &lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Note that &lt;code&gt;flannel&lt;/code&gt; works on &lt;code&gt;amd64&lt;/code&gt;, &lt;code&gt;arm&lt;/code&gt;, &lt;code&gt;arm64&lt;/code&gt;, &lt;code&gt;ppc64le&lt;/code&gt; and &lt;code&gt;s390x&lt;/code&gt; under Linux. Windows (&lt;code&gt;amd64&lt;/code&gt;) is claimed as supported in v0.11.0 but the usage is undocumented.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For more information about &lt;code&gt;flannel&lt;/code&gt;, see &lt;a class="link" href="https://github.com/coreos/flannel" target="_blank" rel="noopener"&#10; &gt;the CoreOS flannel repository on GitHub &lt;/a&gt;.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;相关的网络配置已在脚本中写入，此时直接执行yml脚本即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次查看容器运行情况，所有容器均已运行，则master节点配置完成&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ kubectl get pod --all-namespaces&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAMESPACE NAME READY STATUS RESTARTS AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-c297b 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m17s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-spzhj 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m17s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system etcd-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 4m35s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-apiserver-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 4m45s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-controller-manager-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 4m36s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-flannel-ds-amd64-6rchg 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 3m50s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-xlb62 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m17s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-scheduler-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 4m47s&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="配置worker节点"&gt;&lt;a href="#%e9%85%8d%e7%bd%aeworker%e8%8a%82%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;配置worker节点&#10;&lt;/h2&gt;&lt;p&gt;以&lt;code&gt;k8s-node1&lt;/code&gt;为例，执行&lt;code&gt;master&lt;/code&gt;初始化时提供的脚本即可加入&lt;code&gt;k8s&lt;/code&gt;集群，输出如下则加入成功&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-node1 ~&lt;span class="o"&gt;]&lt;/span&gt;$ sudo kubeadm join 192.168.205.120:6443 --token 8ry5oo.y48ksgurn103zq4h &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; --discovery-token-ca-cert-hash sha256:ead07352591500c2cfe3321bf87d2e068790e16f2a7e0cc23541c864d24006d4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;preflight&lt;span class="o"&gt;]&lt;/span&gt; Running pre-flight checks&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;WARNING IsDockerSystemdCheck&lt;span class="o"&gt;]&lt;/span&gt;: detected &lt;span class="s2"&gt;&amp;#34;cgroupfs&amp;#34;&lt;/span&gt; as the Docker cgroup driver. The recommended driver is &lt;span class="s2"&gt;&amp;#34;systemd&amp;#34;&lt;/span&gt;. Please follow the guide at https://kubernetes.io/docs/setup/cri/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;preflight&lt;span class="o"&gt;]&lt;/span&gt; Reading configuration from the cluster...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;preflight&lt;span class="o"&gt;]&lt;/span&gt; FYI: You can look at this config file with &lt;span class="s1"&gt;&amp;#39;kubectl -n kube-system get cm kubeadm-config -oyaml&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Downloading configuration &lt;span class="k"&gt;for&lt;/span&gt; the kubelet from the &lt;span class="s2"&gt;&amp;#34;kubelet-config-1.16&amp;#34;&lt;/span&gt; ConfigMap in the kube-system namespace&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Writing kubelet configuration to file &lt;span class="s2"&gt;&amp;#34;/var/lib/kubelet/config.yaml&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Writing kubelet environment file with flags to file &lt;span class="s2"&gt;&amp;#34;/var/lib/kubelet/kubeadm-flags.env&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Activating the kubelet service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;kubelet-start&lt;span class="o"&gt;]&lt;/span&gt; Waiting &lt;span class="k"&gt;for&lt;/span&gt; the kubelet to perform the TLS Bootstrap...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This node has joined the cluster:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* Certificate signing request was sent to apiserver and a response was received.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* The Kubelet was informed of the new secure connection details.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Run &lt;span class="s1"&gt;&amp;#39;kubectl get nodes&amp;#39;&lt;/span&gt; on the control-plane to see this node join the cluster.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;稍等片刻进入&lt;code&gt;master&lt;/code&gt;节点查看容器运行情况，会发现多了几个网络容器，属于预期情况&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ kubectl get pod --all-namespaces&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAMESPACE NAME READY STATUS RESTARTS AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-c297b 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 6m28s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-spzhj 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 6m28s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system etcd-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m46s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-apiserver-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m56s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-controller-manager-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m47s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-flannel-ds-amd64-6fwg5 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 49s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-flannel-ds-amd64-6rchg 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m1s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-flannel-ds-amd64-z4plh 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 43s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-cdcs4 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 49s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-nlmbb 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 43s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-xlb62 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 6m28s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-scheduler-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m58s&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="集群验证"&gt;&lt;a href="#%e9%9b%86%e7%be%a4%e9%aa%8c%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;集群验证&#10;&lt;/h2&gt;&lt;p&gt;在&lt;code&gt;master&lt;/code&gt;节点中启动&lt;code&gt;nginx&lt;/code&gt;容器测试集群情况&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl create deployment nginx --image&lt;span class="o"&gt;=&lt;/span&gt;nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;稍等片刻，输出如下则集群正常运行，&lt;code&gt;k8s&lt;/code&gt;集群配置完成&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@k8s-master ~&lt;span class="o"&gt;]&lt;/span&gt;$ kubectl get pod --all-namespaces&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAMESPACE NAME READY STATUS RESTARTS AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;default nginx-86c57db685-2gkxm 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 58s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-c297b 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7m46s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-58cc8c89f4-spzhj 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7m46s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system etcd-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7m4s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-apiserver-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7m14s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-controller-manager-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7m5s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-flannel-ds-amd64-6fwg5 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 2m7s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-flannel-ds-amd64-6rchg 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 6m19s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-flannel-ds-amd64-z4plh 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 2m1s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-cdcs4 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 2m7s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-nlmbb 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 2m1s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-proxy-xlb62 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7m46s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system kube-scheduler-k8s-master 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 7m16s&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Elasticsearch Docker高可用环境搭建</title><link>https://blog.fjy8018.top/archives/216/</link><pubDate>Tue, 10 Sep 2019 22:52:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/216/</guid><description>&lt;h2 id="介绍"&gt;&lt;a href="#%e4%bb%8b%e7%bb%8d" class="header-anchor"&gt;&lt;/a&gt;介绍&#10;&lt;/h2&gt;&lt;p&gt;作为Elastic Stack 的核心，Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎，本次主要用于存储业务数据和基于业务日志进行数据统计分析。&lt;/p&gt;&#10;&lt;h2 id="目标"&gt;&lt;a href="#%e7%9b%ae%e6%a0%87" class="header-anchor"&gt;&lt;/a&gt;目标&#10;&lt;/h2&gt;&lt;p&gt;本次目标是搭建个人项目所使用的小型es高可用环境，目前需要使用es的服务有些部署在美国的服务器，有些部署在国内的服务器，带宽延迟各不相同，为了保证应用连接es延迟最小，计划同时在美国和中国都部署节点，不同区域的应用连接不同的节点&lt;/p&gt;&#10;&lt;h2 id="基础环境"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;基础环境&#10;&lt;/h2&gt;&lt;p&gt;本次配置全局使用真实服务器，服务器配置如下&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;名称&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;CPU&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;内存&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;系统&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Docker版本&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;磁盘大小&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;区域&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;es01&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CentOS 7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;19.03.1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40 G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;亚洲&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;es02&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CentOS 7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;19.03.1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;美洲&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;es03&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CentOS 7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;19.03.1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;36G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;美洲&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;es04&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CentOS 7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;19.03.1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;50G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;亚洲&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;所有服务器部署的&lt;code&gt;es&lt;/code&gt;版本均为：&lt;code&gt;6.6.2&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;从表中可见内存和磁盘都不大，如果是公司项目配置肯定比这个好很多，但对于个人使用来说足够了，至于为什么是需要4台而不是3台在最后搭建完成后会进行分析&lt;/p&gt;&#10;&lt;h2 id="部署前准备"&gt;&lt;a href="#%e9%83%a8%e7%bd%b2%e5%89%8d%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;部署前准备&#10;&lt;/h2&gt;&lt;p&gt;就算使用了Docker容器，&lt;code&gt;elasticsearch&lt;/code&gt;仍然不像普通镜像那么简单启动，es对虚拟内存敏感，因此服务器必须是内核虚拟化&lt;code&gt;KVM&lt;/code&gt;架构，不支持&lt;code&gt;OpenVZ&lt;/code&gt;虚拟，参考官方说明&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h4 id="production-modeedit"&gt;&lt;a href="#production-modeedit" class="header-anchor"&gt;&lt;/a&gt;Production mode&lt;a class="link" href="https://github.com/elastic/elasticsearch/edit/6.6/docs/reference/setup/install/docker.asciidoc" target="_blank" rel="noopener"&#10; &gt;edit&lt;/a&gt;&#10;&lt;/h4&gt;&lt;p&gt;The &lt;code&gt;vm.max_map_count&lt;/code&gt; kernel setting needs to be set to at least &lt;code&gt;262144&lt;/code&gt; for production use. Depending on your platform:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Linux&lt;/p&gt;&#10;&lt;p&gt;The &lt;code&gt;vm.max_map_count&lt;/code&gt; setting should be set permanently in /etc/sysctl.conf:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ grep vm.max_map_count /etc/sysctl.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vm.max_map_count&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;262144&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To apply the setting on a live system type: &lt;code&gt;sysctl -w vm.max_map_count=262144&lt;/code&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;macOS with &lt;a class="link" href="https://docs.docker.com/engine/installation/mac/#/docker-for-mac" target="_blank" rel="noopener"&#10; &gt;Docker for Mac&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;The &lt;code&gt;vm.max_map_count&lt;/code&gt; setting must be set within the xhyve virtual machine:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Just press enter and configure the &lt;code&gt;sysctl&lt;/code&gt; setting as you would for Linux:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl -w vm.max_map_count&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;262144&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="按照指引设置内存参数"&gt;&lt;a href="#%e6%8c%89%e7%85%a7%e6%8c%87%e5%bc%95%e8%ae%be%e7%bd%ae%e5%86%85%e5%ad%98%e5%8f%82%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;按照指引设置内存参数&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo sysctl -w vm.max_map_count&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;262144&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="前置知识"&gt;&lt;a href="#%e5%89%8d%e7%bd%ae%e7%9f%a5%e8%af%86" class="header-anchor"&gt;&lt;/a&gt;前置知识&#10;&lt;/h2&gt;&lt;h3 id="裂脑事件"&gt;&lt;a href="#%e8%a3%82%e8%84%91%e4%ba%8b%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;裂脑事件&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Elasticsearch&lt;/code&gt;牺牲了一致性，以确保可用性和分区容错。其背后的原因是短期的不良行为比短期的不可用性问题少。换句话说，当群集中的&lt;code&gt;Elasticsearch&lt;/code&gt;节点无法复制对数据的更改时，它们将继续为应用程序提供服务。当节点能够复制其数据时，它们将尝试聚合副本并实现&lt;em&gt;最终的一致性&lt;/em&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;Elasticsearch&lt;/code&gt;通过&lt;strong&gt;选举&lt;/strong&gt;主节点来解决之前的问题，主节点负责数据库操作，例如创建新索引，在群集节点周围移动分片等等。主节点与其他节点主动协调其操作，确保数据可以由非主节点汇聚。&lt;/p&gt;&#10;&lt;p&gt;在某些情况下，先前的机制可能会失败，从而导致&lt;strong&gt;裂脑事件&lt;/strong&gt;。当&lt;code&gt;Elasticsearch&lt;/code&gt;集群分为两个区块时，&lt;strong&gt;若每个区块都有一个节点都认为它们是主节点&lt;/strong&gt;，因为主节点将在数据上&lt;strong&gt;独立&lt;/strong&gt;工作，数据一致性就会&lt;strong&gt;丢失&lt;/strong&gt;。因此，节点将对相同的查询做出不同的响应。这将会是灾难性的事件，因为来自两个主节点的数据无法自动重新加入，并且需要相当多的手动工作来纠正这种情况。&lt;/p&gt;&#10;&lt;h2 id="节点部署"&gt;&lt;a href="#%e8%8a%82%e7%82%b9%e9%83%a8%e7%bd%b2" class="header-anchor"&gt;&lt;/a&gt;节点部署&#10;&lt;/h2&gt;&lt;p&gt;3个主节点节点均使用&lt;code&gt;docker-compose&lt;/code&gt;命令部署，需要自行安装好相关环境&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;es01&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;docker.elastic.co/elasticsearch/elasticsearch:6.6.2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;es01&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;cluster.name=docker-cluster&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;bootstrap.memory_lock=true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;ES_JAVA_OPTS=-Xms512m -Xmx512m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;discovery.zen.ping.unicast.hosts=es2.xxx.com,es3.xxx.com,es4.xxx.com&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;discovery.zen.minimum_master_nodes=2&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;network.publish_host=es1..xxx.com&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;node.name=es01-XXX&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ulimits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memlock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;soft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./elasticsearch/data:/usr/share/elasticsearch/data&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;9200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;9200&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;9300&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;9300&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;fjyesnet&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mem_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1g&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fjyesnet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其他节点配置均相同，修改服务发现域名配置即可，&lt;strong&gt;放行防火墙部分不再赘述，需要可以查看我以前发的文章&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;非主节点配置只需加入&lt;code&gt;node.master=false&lt;/code&gt;配置即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;es01&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;docker.elastic.co/elasticsearch/elasticsearch:6.6.2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;es04&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;cluster.name=docker-cluster&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;bootstrap.memory_lock=true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;ES_JAVA_OPTS=-Xms512m -Xmx512m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;discovery.zen.ping.unicast.hosts=es2.xxx.com,es3.xxx.com,es1.xxx.com&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;discovery.zen.minimum_master_nodes=2&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;network.publish_host=es4..xxx.com&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;node.name=es04-XXX&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;node.master=false&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ulimits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memlock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;soft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./elasticsearch/data:/usr/share/elasticsearch/data&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;9200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;9200&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;9300&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;9300&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;fjyesnet&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mem_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1g&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fjyesnet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参数解析&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;discovery.zen.ping.unicast.hosts&lt;/code&gt;配置广播地址，用于节点发现，此处配置的是指向其他节点IP的域名地址，该域名在任何节点均可以被访问&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;discovery.zen.minimum_master_nodes&lt;/code&gt;配置主节点最小数量，该参数&lt;strong&gt;十分重要&lt;/strong&gt;，用于防止脑裂（split-brain）事件的发生。&lt;/p&gt;&#10;&lt;p&gt;原理：前面提到了脑裂事件发生的原因，而避免的方法就是保证&lt;strong&gt;至少3个节点可靠地工作&lt;/strong&gt;，因为一个或两个节点不能形成多数投票，这也是为什么选择使用4个节点并将该值配置为2，确保分布式环境还可以随机宕机一个节点以保证不会出现脑裂问题，因此第4个节点最好配置为无法成为主节点的slave节点。而若仅配置为3个节点的高可用状态，其实是一种“伪高可用”，此时随机宕机一个节点将可能发生“脑裂”问题，2个节点的es环境无法进行主节点的选举，并且可能出现独立的分块。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;network.publish_host&lt;/code&gt;用于提供其他节点服务发现的主机名，默认为本地主机名映射为IP的地址，但由于使用容器提供服务发现，并且不在同一个网段，故需要手工指定&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;mem_limit&lt;/code&gt;容器内存限制为1G&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;节点数量与配置的主节点数对应关系&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;code&gt;Master nodes&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;code&gt;minimum_master_nodes&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;备注&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;如果另一个节点宕机，集群将停止工作!&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="对可能产生疑问的解释"&gt;&lt;a href="#%e5%af%b9%e5%8f%af%e8%83%bd%e4%ba%a7%e7%94%9f%e7%96%91%e9%97%ae%e7%9a%84%e8%a7%a3%e9%87%8a" class="header-anchor"&gt;&lt;/a&gt;对可能产生疑问的解释&#10;&lt;/h3&gt;&lt;h4 id="1当前docker-compose已经更新到37了为什么还使用2这个老版本"&gt;&lt;a href="#1%e5%bd%93%e5%89%8ddocker-compose%e5%b7%b2%e7%bb%8f%e6%9b%b4%e6%96%b0%e5%88%b037%e4%ba%86%e4%b8%ba%e4%bb%80%e4%b9%88%e8%bf%98%e4%bd%bf%e7%94%a82%e8%bf%99%e4%b8%aa%e8%80%81%e7%89%88%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;1.当前&lt;code&gt;docker-compose&lt;/code&gt;已经更新到&lt;code&gt;3.7&lt;/code&gt;了为什么还使用&lt;code&gt;2&lt;/code&gt;这个老版本？&#10;&lt;/h4&gt;&lt;p&gt;原因：最新&lt;a class="link" href="https://docs.docker.com/compose/compose-file/" target="_blank" rel="noopener"&#10; &gt;文档地址&lt;/a&gt;，官方文档指出3.x版本已经不再支持&lt;code&gt;mem_limit&lt;/code&gt;参数&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This replaces the &lt;a class="link" href="https://docs.docker.com/compose/compose-file/compose-file-v2/#cpu-and-other-resources" target="_blank" rel="noopener"&#10; &gt;older resource constraint options&lt;/a&gt; for non swarm mode in Compose files prior to version 3 (&lt;code&gt;cpu_shares&lt;/code&gt;, &lt;code&gt;cpu_quota&lt;/code&gt;, &lt;code&gt;cpuset&lt;/code&gt;, &lt;code&gt;mem_limit&lt;/code&gt;, &lt;code&gt;memswap_limit&lt;/code&gt;, &lt;code&gt;mem_swappiness&lt;/code&gt;), as described in &lt;a class="link" href="https://docs.docker.com/compose/compose-file/compose-versioning/#upgrading" target="_blank" rel="noopener"&#10; &gt;Upgrading version 2.x to 3.x&lt;/a&gt;.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;但对小内存机器以及数据量不会非常的大的环境，内存限制参数尤为重要，经过实测，空载或者小负载（1000 doc）以下的es节点内存占用大约为1.5G左右，故各环境限制为1G不会影响性能，不仅如此，es官方提供的部署文档使用的也是&lt;code&gt;2.2&lt;/code&gt;版本&lt;/p&gt;&#10;&lt;h4 id="2当前elasticsearch已经更新到73了为什么还使用66这个老版本"&gt;&lt;a href="#2%e5%bd%93%e5%89%8delasticsearch%e5%b7%b2%e7%bb%8f%e6%9b%b4%e6%96%b0%e5%88%b073%e4%ba%86%e4%b8%ba%e4%bb%80%e4%b9%88%e8%bf%98%e4%bd%bf%e7%94%a866%e8%bf%99%e4%b8%aa%e8%80%81%e7%89%88%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;2.当前&lt;code&gt;Elasticsearch&lt;/code&gt;已经更新到&lt;code&gt;7.3&lt;/code&gt;了为什么还使用&lt;code&gt;6.6&lt;/code&gt;这个老版本？&#10;&lt;/h4&gt;&lt;p&gt;原因：&lt;code&gt;7.x&lt;/code&gt;版本目前尚有许多外部服务不能兼容，例如&lt;code&gt;graylog&lt;/code&gt;，并且&lt;code&gt;Spring&lt;/code&gt;官方组件暂时也只能兼容到&lt;code&gt;6.x&lt;/code&gt;的版本，所以综合考虑使用6.x的最新版&lt;code&gt;6.6.2&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;graylog&lt;/code&gt;官方文档&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Caution&lt;/p&gt;&#10;&lt;p&gt;Graylog 3.x &lt;strong&gt;does not&lt;/strong&gt; work with Elasticsearch 7.x!&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;code&gt;Spring&lt;/code&gt;官方文档&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Compatibility Matrix&lt;/strong&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Spring Data Elasticsearch&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Elasticsearch&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;em&gt;3.2.x&lt;/em&gt; (not yet released)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;em&gt;6.8.1&lt;/em&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.1.x&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6.2.2&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.0.x&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5.5.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.1.x&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.4.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.0.x&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.2.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.3.x&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.5.2&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h4 id="3一般高可用不是部署3个节点就足够了吗为什么要4个节点"&gt;&lt;a href="#3%e4%b8%80%e8%88%ac%e9%ab%98%e5%8f%af%e7%94%a8%e4%b8%8d%e6%98%af%e9%83%a8%e7%bd%b23%e4%b8%aa%e8%8a%82%e7%82%b9%e5%b0%b1%e8%b6%b3%e5%a4%9f%e4%ba%86%e5%90%97%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%814%e4%b8%aa%e8%8a%82%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;3.一般高可用不是部署3个节点就足够了吗，为什么要4个节点？&#10;&lt;/h4&gt;&lt;p&gt;原因：本次总共部署了3个主节点和一个非主节点，即4个都是数据节点，但只有3个参与选举。如果仅部署3个节点，那么3个都必须为主节点，此时若其中一个主节点宕机，那么不满足选举“&lt;strong&gt;至少3个节点可靠地工作&lt;/strong&gt;”的条件，故新增多一个冗余数据节点，其不能竞选为主节点，但能对节点竞选做出响应，依然满足条件，详细算法可以参考Raft协议的实现原理&lt;/p&gt;&#10;&lt;h2 id="节点启动"&gt;&lt;a href="#%e8%8a%82%e7%82%b9%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;节点启动&#10;&lt;/h2&gt;&lt;p&gt;使用&lt;code&gt;docker-compose&lt;/code&gt;命令启动即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker-compose up -d&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这种直接启动的方式会报文件夹无访问权限的错误，需要在命令&lt;strong&gt;执行后&lt;/strong&gt;手动赋予文件夹访问权限&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ chmod &lt;span class="m"&gt;777&lt;/span&gt; -R elasticsearch/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ chown 1000:1000 -R elasticsearch/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若此时es容器已经停止则再执行一次启动命令即可&lt;/p&gt;&#10;&lt;h2 id="部署结果"&gt;&lt;a href="#%e9%83%a8%e7%bd%b2%e7%bb%93%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;部署结果&#10;&lt;/h2&gt;&lt;p&gt;使用&lt;code&gt;chrome&lt;/code&gt;插件&lt;code&gt;elasticsearch-head&lt;/code&gt;连接任意一个节点查看情况&lt;/p&gt;&#10;&lt;p&gt;4节点在线，接入业务系统后各节点情况如下图。&lt;/p&gt;&#10;&lt;p&gt;注意所有索引副本数都要是2或者3，否则都无法实现高可用效果&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1568039948401" class="gallery-image" data-flex-basis="823px" data-flex-grow="342" height="496" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1568039948401.png" width="1701"&gt;&lt;/p&gt;&#10;&lt;p&gt;由于网络问题或者服务器问题导致其中一个节点下线，es会自动对各个节点的副本重新路由，此时集群颜色为黄色，仍然可用，稍等片刻会实现最终一致性&lt;/p&gt;&#10;&lt;p&gt;若此时主节点下线，整个集群会立刻重新选举出新的主节点并路由各个分片，保证24小时服务都处在可用状态&lt;/p&gt;&#10;&lt;p&gt;橙色表示尚未路由完成，但所有索引数据均可用&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1568038733273" class="gallery-image" data-flex-basis="968px" data-flex-grow="403" height="422" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1568038733273.png" width="1703"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;若某些索引的副本数设置为1，则当某个节点宕机且其刚好存储该索引的副本，则整个集群的状态将立刻变成红色，意思是数据丢失&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1568038760406" class="gallery-image" data-flex-basis="708px" data-flex-grow="295" height="649" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1568038760406.png" width="1916"&gt;&lt;/p&gt;&#10;&lt;p&gt;灰色表示已经下线的分片并且无法被重新路由&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1568041023184" class="gallery-image" data-flex-basis="873px" data-flex-grow="363" height="286" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1568041023184.png" width="1041"&gt;&lt;/p&gt;&#10;</description></item><item><title>基于Mesos+Marathon的DevOps分布式环境搭建</title><link>https://blog.fjy8018.top/archives/215/</link><pubDate>Sun, 18 Aug 2019 22:01:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/215/</guid><description>&lt;h2 id="基础环境"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;基础环境&#10;&lt;/h2&gt;&lt;p&gt;本地准备了4台虚拟机配置如下&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;虚拟机名称&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;IP&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;CPU&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;内存&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;磁盘&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;129&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.133.129&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20G&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;130&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.133.130&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20G&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;131&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.133.131&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20G&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;132&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.133.132&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20G&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="部署架构"&gt;&lt;a href="#%e9%83%a8%e7%bd%b2%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;部署架构&#10;&lt;/h2&gt;&lt;p&gt;部署架构图如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="devops" class="gallery-image" data-flex-basis="312px" data-flex-grow="130" height="743" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://s2.ax1x.com/2019/11/27/QCWiWt.png" width="966"&gt;&lt;/p&gt;&#10;&lt;p&gt;各服务详细部署情况&lt;/p&gt;&#10;&lt;h3 id="zookeeper"&gt;&lt;a href="#zookeeper" class="header-anchor"&gt;&lt;/a&gt;Zookeeper&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务器&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;节点&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;版本&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;129&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zk-1-docker&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2181&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.4.14&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;131&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zk-2-docker&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2181&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.4.14&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;132&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zk-3-docker&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2181&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.4.14&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="mesosmaster"&gt;&lt;a href="#mesosmaster" class="header-anchor"&gt;&lt;/a&gt;MesosMaster&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务器&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;节点&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;版本&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;132&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;master&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5050&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.7.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;130&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;master&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5050&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.7.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;131&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;master&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5050&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.7.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="mesosslave"&gt;&lt;a href="#mesosslave" class="header-anchor"&gt;&lt;/a&gt;MesosSlave&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务器&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;节点&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;版本&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;131&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;slave2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5051&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.7.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;130&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;slave1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5051&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.7.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="marathon"&gt;&lt;a href="#marathon" class="header-anchor"&gt;&lt;/a&gt;marathon&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务器&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;版本&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;132&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;marathonMaster&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8080&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;v1.6.496&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="marathon-lb"&gt;&lt;a href="#marathon-lb" class="header-anchor"&gt;&lt;/a&gt;marathon-lb&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务器&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;版本&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;129&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;marathon-lb&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;9090&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;v1.14.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="环境准备"&gt;&lt;a href="#%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;环境准备&#10;&lt;/h2&gt;&lt;h3 id="开放防火墙"&gt;&lt;a href="#%e5%bc%80%e6%94%be%e9%98%b2%e7%81%ab%e5%a2%99" class="header-anchor"&gt;&lt;/a&gt;开放防火墙&#10;&lt;/h3&gt;&lt;p&gt;本次服务各主机将可能使用到以下端口&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;8080&lt;/li&gt;&#10;&lt;li&gt;9090&lt;/li&gt;&#10;&lt;li&gt;2181&lt;/li&gt;&#10;&lt;li&gt;2888&lt;/li&gt;&#10;&lt;li&gt;3888&lt;/li&gt;&#10;&lt;li&gt;5050&lt;/li&gt;&#10;&lt;li&gt;5051&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;逐台登陆服务器执行放行防火墙脚本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;8080/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;2181/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;5050/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;5051/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;9090/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;2888/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;3888/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="安装docker"&gt;&lt;a href="#%e5%ae%89%e8%a3%85docker" class="header-anchor"&gt;&lt;/a&gt;安装Docker&#10;&lt;/h3&gt;&lt;p&gt;本次所有服务均采用Docker方式部署，服务调度通过&lt;code&gt;Docker in Docker&lt;/code&gt;的方式进行&lt;/p&gt;&#10;&lt;p&gt;由于Docker有可能出现版本影响环境问题，参考文章&#10;&lt;a class="link" href="https://blog.fjy8018.top/archives/208/" &gt;相关文章&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;故建议安装时指定版本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum-config-manager &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --add-repo &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://download.docker.com/linux/centos/docker-ce.repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum install docker-ce-19.03.1 docker-ce-cli-19.03.1 containerd.io&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;设置开机启动并运行服务&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl start docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装docker-compose，脚本参考&lt;a class="link" href="https://docs.docker.com/compose/install/" target="_blank" rel="noopener"&#10; &gt;官方文档&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo curl -L &lt;span class="s2"&gt;&amp;#34;https://github.com/docker/compose/releases/download/1.24.1/docker-compose-&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -s&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -m&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -o /usr/local/bin/docker-compose&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo chmod +x /usr/local/bin/docker-compose&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装zookeeper"&gt;&lt;a href="#%e5%ae%89%e8%a3%85zookeeper" class="header-anchor"&gt;&lt;/a&gt;安装Zookeeper&#10;&lt;/h2&gt;&lt;p&gt;鉴于zk &lt;code&gt;3.4&lt;/code&gt;和&lt;code&gt;3.5&lt;/code&gt;版本的配置有一定差别，编写脚本时注意版本，此处使用的是&lt;code&gt;3.4.14&lt;/code&gt;，以下配置文件注意&lt;code&gt;hosts&lt;/code&gt;的微小差别&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;docker-compose-zoo-129.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;zoo1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zookeeper:3.4.14&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extra_hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;zoo2: 192.168.133.131&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;zoo3: 192.168.133.132&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;2181&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;2181&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;2888&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;2888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;3888&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;3888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ZOO_MY_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ZOO_SERVERS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;docker-compose-zoo-131.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;zoo2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zookeeper:3.4.14&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extra_hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;zoo1: 192.168.133.129&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;zoo3: 192.168.133.132&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;2181&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;2181&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;2888&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;2888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;3888&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;3888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ZOO_MY_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ZOO_SERVERS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;docker-compose-zoo-132.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;zoo3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zookeeper:3.4.14&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extra_hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;zoo1: 192.168.133.129&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;zoo2: 192.168.133.131&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;2181&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;2181&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;2888&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;2888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;3888&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;3888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ZOO_MY_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ZOO_SERVERS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装mesosmaster"&gt;&lt;a href="#%e5%ae%89%e8%a3%85mesosmaster" class="header-anchor"&gt;&lt;/a&gt;安装MesosMaster&#10;&lt;/h2&gt;&lt;p&gt;MesosMaster也采用3节点高可用方案，由于要在各台机器上配置hosts过于麻烦，此处选择使用非hosts注册方式，故需要配置&lt;strong&gt;各自&lt;/strong&gt;的&lt;code&gt;IP&lt;/code&gt;地址&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;docker-compose-mesos-master-130.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mesos-master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mesosphere/mesos-master:1.7.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="kc"&gt;no&lt;/span&gt;-&lt;span class="l"&gt;hostname_lookup --ip=192.168.133.130&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_ZK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zk://192.168.133.129:2181/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_QUORUM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_REGISTRY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;in_memory&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/log/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/tmp/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;docker-compose-mesos-master-131.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mesos-master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mesosphere/mesos-master:1.7.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="kc"&gt;no&lt;/span&gt;-&lt;span class="l"&gt;hostname_lookup --ip=192.168.133.131&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_ZK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zk://192.168.133.129:2181/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_QUORUM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_REGISTRY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;in_memory&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/log/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/tmp/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;docker-compose-mesos-master-132.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mesos-master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mesosphere/mesos-master:1.7.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="kc"&gt;no&lt;/span&gt;-&lt;span class="l"&gt;hostname_lookup --ip=192.168.133.132&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_ZK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zk://192.168.133.129:2181/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_QUORUM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_REGISTRY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;in_memory&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/log/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/tmp/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装mesosslave"&gt;&lt;a href="#%e5%ae%89%e8%a3%85mesosslave" class="header-anchor"&gt;&lt;/a&gt;安装MesosSlave&#10;&lt;/h2&gt;&lt;p&gt;需要选择与master对应的版本号，同时也使用&lt;code&gt;IP&lt;/code&gt;注册的方式&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;docker-compose-mesos-slave1.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mesos-slave1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mesosphere/mesos-slave:1.7.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;slave1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="kc"&gt;no&lt;/span&gt;-&lt;span class="l"&gt;systemd_enable_support --no-hostname_lookup --ip=192.168.133.131&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;5051&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;5051&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/var/run/docker.sock:/var/run/docker.sock&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/cgroup:/cgroup&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/sys:/sys&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/usr/bin/docker:/usr/local/bin/docker&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5051&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_MASTER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zk://192.168.133.129:2181/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_SWITCH_USER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_CONTAINERIZERS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;docker,mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/log/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/tmp/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;docker-compose-mesos-slave2.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mesos-slave2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mesosphere/mesos-slave:1.7.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;slave2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="kc"&gt;no&lt;/span&gt;-&lt;span class="l"&gt;systemd_enable_support --no-hostname_lookup --ip=192.168.133.130&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;5051&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;5051&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/var/run/docker.sock:/var/run/docker.sock&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/cgroup:/cgroup&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/sys:/sys&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/usr/bin/docker:/usr/local/bin/docker&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5051&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_MASTER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zk://192.168.133.129:2181/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_SWITCH_USER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_CONTAINERIZERS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;docker,mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/log/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/tmp/mesos&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="marathon-1"&gt;&lt;a href="#marathon-1" class="header-anchor"&gt;&lt;/a&gt;Marathon&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;marathon&lt;/code&gt;在高版本会出现收不到&lt;code&gt;mesos&lt;/code&gt;心跳自动停止的问题，暂时没找到可以配置的方式，故使用&lt;code&gt;1.6&lt;/code&gt;的版本，问题链接如下&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://jira.mesosphere.com/browse/MARATHON-8345" target="_blank" rel="noopener"&#10; &gt;Missing heartbeats from Mesos, eventually disconnecting and dying&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;docker-compose-marathon.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;marathon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mesosphere/marathon:v1.6.496&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;marathon&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;master zk://192.168.133.129:2181/mesos --zk zk://192.168.133.129:2181/marathon&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装marathon-lb"&gt;&lt;a href="#%e5%ae%89%e8%a3%85marathon-lb" class="header-anchor"&gt;&lt;/a&gt;安装marathon-lb&#10;&lt;/h2&gt;&lt;p&gt;marathon-lb 与marathon没有版本的对应关系，故使用当前最新的版本&lt;code&gt;1.14&lt;/code&gt;，新版和旧版的配置也有所不同，在早期版本无需指定端口的环境变量，翻阅官网也指出其应该是自动配置的，但如果使用Docker默认运行脚本则需要手动指定&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;if you use the built-in &lt;code&gt;run&lt;/code&gt; script, you&amp;rsquo;ll need to pass an env var that contains a comma separated list of the ports HAProxy binds to&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;参考ISSUES：&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://github.com/mesosphere/marathon-lb/issues/59" target="_blank" rel="noopener"&#10; &gt;unbound variable PORTS v1.1.0&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;docker-compose-marathon-lb.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;marathon-lb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mesosphere/marathon-lb:v1.14.0&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;host&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;marathon-lb&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sse --group external --marathon http://192.168.133.132:8080&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PORTS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9090&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;9090&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;9090&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="启动"&gt;&lt;a href="#%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;启动&#10;&lt;/h2&gt;&lt;p&gt;启动顺序：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;zookeeper&lt;/li&gt;&#10;&lt;li&gt;mesosMaster&lt;/li&gt;&#10;&lt;li&gt;mesosSlave&lt;/li&gt;&#10;&lt;li&gt;marathon&lt;/li&gt;&#10;&lt;li&gt;marathon-lb&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;由于全使用docker-compose脚本编写，启动时只需指定文件名即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker-compose -f xx.yml up -d&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看日志命令，&lt;code&gt;-f&lt;/code&gt;表示跟踪最新的日志&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker-compose -f xx.yml logs &lt;span class="o"&gt;[&lt;/span&gt;-f&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="效果"&gt;&lt;a href="#%e6%95%88%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;效果&#10;&lt;/h2&gt;&lt;p&gt;随便打开一个节点的mesos端口，可看到当前的服务注册数量和当前的leader，其采用与ZK类似的选举算法来选出leader实现高可用&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="622" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566123331161.png" width="467"&gt;&lt;/p&gt;&#10;&lt;p&gt;slave信息&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="527px" data-flex-grow="219" height="346" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566123374166.png" width="761"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看框架注册情况&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566124680011" class="gallery-image" data-flex-basis="1331px" data-flex-grow="554" height="338" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566124680011.png" width="1875"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看marathon-lb情况&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566124772689" class="gallery-image" data-flex-basis="642px" data-flex-grow="267" height="717" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566124772689.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;marathon面板&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566123387054" class="gallery-image" data-flex-basis="425px" data-flex-grow="177" height="670" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566123387054.png" width="1189"&gt;&lt;/p&gt;&#10;&lt;p&gt;marathon支持通过面板创建任务和通过rest接口创建任务&lt;/p&gt;&#10;&lt;p&gt;使用postman创建任务测试&lt;/p&gt;&#10;&lt;p&gt;请求路径http://192.168.133.132:8080/v2/apps&lt;/p&gt;&#10;&lt;p&gt;内容&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;basic-0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cmd&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;while [ true ] ; do echo &amp;#39;Hello Marathon&amp;#39; ; sleep 5 ; done&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cpus&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mem&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;instances&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566123482678" class="gallery-image" data-flex-basis="374px" data-flex-grow="155" height="571" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566123482678.png" width="890"&gt;&lt;/p&gt;&#10;&lt;p&gt;面板同步显示&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566123506660" class="gallery-image" data-flex-basis="1503px" data-flex-grow="626" height="332" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566123506660.png" width="2080"&gt;&lt;/p&gt;&#10;&lt;p&gt;运行状态正常&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566124822675" class="gallery-image" data-flex-basis="702px" data-flex-grow="292" height="675" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566124822675.png" width="1976"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看详情可知其运行在130服务器上&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566124853340" class="gallery-image" data-flex-basis="437px" data-flex-grow="182" height="601" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566124853340.png" width="1095"&gt;&lt;/p&gt;&#10;&lt;p&gt;通过面板创建&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566124949525" class="gallery-image" data-flex-basis="480px" data-flex-grow="200" height="959" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566124949525.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;切换为json格式可以编辑更多内容&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;demo-springboot&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cmd&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cpus&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mem&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;disk&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;instances&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;image&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fjy8018/demo-springboot:2.1.6.RELEASE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;forcePullImage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;DOCKER&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;portMappings&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;containerPort&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;protocol&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;servicePort&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18080&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;networks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;container/bridge&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="1566125064780" class="gallery-image" data-flex-basis="816px" data-flex-grow="340" height="576" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125064780.png" width="1960"&gt;&lt;/p&gt;&#10;&lt;p&gt;运行成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125104507" class="gallery-image" data-flex-basis="515px" data-flex-grow="214" height="614" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125104507.png" width="1318"&gt;&lt;/p&gt;&#10;&lt;p&gt;访问成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125318702" class="gallery-image" data-flex-basis="1185px" data-flex-grow="493" height="148" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125318702.png" width="731"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看资源调度情况&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125350396" class="gallery-image" data-flex-basis="443px" data-flex-grow="184" height="1040" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125350396.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125370134" class="gallery-image" data-flex-basis="661px" data-flex-grow="275" height="697" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125370134.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置扩缩容&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125437096" class="gallery-image" data-flex-basis="477px" data-flex-grow="198" height="360" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125437096.png" width="716"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125461566" class="gallery-image" data-flex-basis="477px" data-flex-grow="198" height="688" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125461566.png" width="1368"&gt;&lt;/p&gt;&#10;&lt;p&gt;两个实例被分别调度到不同的机器上&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125537165" class="gallery-image" data-flex-basis="1716px" data-flex-grow="715" height="137" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125537165.png" width="980"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125544430" class="gallery-image" data-flex-basis="1516px" data-flex-grow="631" height="154" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125544430.png" width="973"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置健康检查&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125749835" class="gallery-image" data-flex-basis="263px" data-flex-grow="109" height="825" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125749835.png" width="907"&gt;&lt;/p&gt;&#10;&lt;p&gt;自动轮询接口&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125738241" class="gallery-image" data-flex-basis="697px" data-flex-grow="290" height="653" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125738241.png" width="1899"&gt;&lt;/p&gt;&#10;&lt;p&gt;错误告警&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1566125926856" class="gallery-image" data-flex-basis="422px" data-flex-grow="175" height="604" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1566125926856.png" width="1063"&gt;&lt;/p&gt;&#10;</description></item><item><title>CentOS 7 安装KVM和WebVirtMgr管理面板</title><link>https://blog.fjy8018.top/archives/212/</link><pubDate>Sun, 11 Aug 2019 18:35:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/212/</guid><description>&lt;h2 id="配置静态ip"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e9%9d%99%e6%80%81ip" class="header-anchor"&gt;&lt;/a&gt;配置静态IP&#10;&lt;/h2&gt;&lt;p&gt;此处使用VMware 模拟服务器环境，为防止IP在启动时动态分配，需要手动配置静态IP，如果是物理服务器可直接跳过&lt;/p&gt;&#10;&lt;h3 id="编辑虚拟机网络"&gt;&lt;a href="#%e7%bc%96%e8%be%91%e8%99%9a%e6%8b%9f%e6%9c%ba%e7%bd%91%e7%bb%9c" class="header-anchor"&gt;&lt;/a&gt;编辑虚拟机网络&#10;&lt;/h3&gt;&lt;p&gt;编辑 -&amp;gt; 虚拟网络编辑器&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="413px" data-flex-grow="172" height="195" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1565511835683.png" width="336"&gt;&lt;/p&gt;&#10;&lt;p&gt;更改&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="247px" data-flex-grow="103" height="552" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1565511856009.png" width="570"&gt;&lt;/p&gt;&#10;&lt;p&gt;取消勾选此项&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="283px" data-flex-grow="118" height="483" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1565511935505.png" width="570"&gt;&lt;/p&gt;&#10;&lt;p&gt;进入NAT设置记录默认网关和子网掩码&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="228px" data-flex-grow="95" height="533" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1565511992789.png" width="508"&gt;&lt;/p&gt;&#10;&lt;p&gt;进入虚拟机&lt;/p&gt;&#10;&lt;h3 id="设置虚拟机ip"&gt;&lt;a href="#%e8%ae%be%e7%bd%ae%e8%99%9a%e6%8b%9f%e6%9c%baip" class="header-anchor"&gt;&lt;/a&gt;设置虚拟机IP&#10;&lt;/h3&gt;&lt;p&gt;查看虚拟机网卡，&lt;code&gt;lo&lt;/code&gt;为本地回环口，实际网卡为&lt;code&gt;ens33&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ip addr&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu &lt;span class="m"&gt;65536&lt;/span&gt; qdisc noqueue state UNKNOWN group default qlen &lt;span class="m"&gt;1000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet 127.0.0.1/8 scope host lo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft forever preferred_lft forever&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet6 ::1/128 scope host&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft forever preferred_lft forever&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2: ens33: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu &lt;span class="m"&gt;1500&lt;/span&gt; qdisc pfifo_fast state UP group default qlen &lt;span class="m"&gt;1000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; link/ether 00:0c:29:02:fe:c5 brd ff:ff:ff:ff:ff:ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;编辑网卡配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/sysconfig/network-scripts/ifcfg-ens33&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;加入静态配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Ethernet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PROXY_METHOD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;BROWSER_ONLY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;BOOTPROTO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;static&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DEFROUTE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IPV4_FAILURE_FATAL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IPV6INIT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IPV6_AUTOCONF&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IPV6_DEFROUTE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IPV6_FAILURE_FATAL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IPV6_ADDR_GEN_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;stable-privacy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ens33&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;a63224f4-f210-4d84-933d-c4f0ccd68f7a&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DEVICE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ens33&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ONBOOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;IPADDR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.133.128&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NETMASK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;255.255.255.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GATEWAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.133.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ZONE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;public&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解释&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;ONBOOT&lt;/code&gt;：开机启动&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;BOOTPROTO&lt;/code&gt;：网络分配方式，静态&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;IPPADDR&lt;/code&gt;：手动指定ip地址&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;NETMASK&lt;/code&gt;：子网掩码&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;GATEWAY&lt;/code&gt;：网关ip&lt;/p&gt;&#10;&lt;h3 id="dns配置"&gt;&lt;a href="#dns%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;DNS配置&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/resolv.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;加入DNS配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;nameserver&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.133.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nameserver 8.8.8.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nameserver 114.114.114.114&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;search localdomain&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此处仅加入第一个也可以正常使用，但无法&lt;code&gt;ping&lt;/code&gt;通域名&lt;/p&gt;&#10;&lt;h3 id="修改主机名"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e4%b8%bb%e6%9c%ba%e5%90%8d" class="header-anchor"&gt;&lt;/a&gt;修改主机名&#10;&lt;/h3&gt;&lt;p&gt;没有需求此步骤可以跳过&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/sysconfig/network&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;加入配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Created by anaconda&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NETWORKING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HOSTNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="重启网卡"&gt;&lt;a href="#%e9%87%8d%e5%90%af%e7%bd%91%e5%8d%a1" class="header-anchor"&gt;&lt;/a&gt;重启网卡&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl restart network&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看网络信息&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ip addr&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu &lt;span class="m"&gt;65536&lt;/span&gt; qdisc noqueue state UNKNOWN group default qlen &lt;span class="m"&gt;1000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet 127.0.0.1/8 scope host lo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft forever preferred_lft forever&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet6 ::1/128 scope host&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft forever preferred_lft forever&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2: ens33: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu &lt;span class="m"&gt;1500&lt;/span&gt; qdisc pfifo_fast state UP group default qlen &lt;span class="m"&gt;1000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; link/ether 00:0c:29:02:fe:c5 brd ff:ff:ff:ff:ff:ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet 192.168.133.128/24 brd 192.168.133.255 scope global ens33&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft forever preferred_lft forever&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet6 fe80::20c:29ff:fe02:fec5/64 scope link noprefixroute&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft forever preferred_lft forever&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;静态IP配置完成&lt;/p&gt;&#10;&lt;h2 id="安装kvm"&gt;&lt;a href="#%e5%ae%89%e8%a3%85kvm" class="header-anchor"&gt;&lt;/a&gt;安装KVM&#10;&lt;/h2&gt;&lt;p&gt;此处部分参考GitHub的安装指引，官方wiki也有相关的指南，不过更加复杂&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%AF%A6%E8%A7%A3.md" target="_blank" rel="noopener"&#10; &gt;GitHub安装指引&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://wiki.centos.org/zh/HowTos/KVM" target="_blank" rel="noopener"&#10; &gt;官方wiki&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="检测是否支持kvm"&gt;&lt;a href="#%e6%a3%80%e6%b5%8b%e6%98%af%e5%90%a6%e6%94%af%e6%8c%81kvm" class="header-anchor"&gt;&lt;/a&gt;检测是否支持KVM&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat /proc/cpuinfo &lt;span class="p"&gt;|&lt;/span&gt; egrep &lt;span class="s1"&gt;&amp;#39;vmx|svm&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关闭SELinux，将 /etc/sysconfig/selinux 中的 &lt;code&gt;SELinux=enforcing&lt;/code&gt; 修改为 &lt;code&gt;SELinux=disabled&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/sysconfig/selinux&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="安装-kvm-环境"&gt;&lt;a href="#%e5%ae%89%e8%a3%85-kvm-%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;安装 KVM 环境&#10;&lt;/h3&gt;&lt;p&gt;通过 &lt;a class="link" href="https://jaywcjlove.github.io/linux-command/c/yum.html" target="_blank" rel="noopener"&#10; &gt;yum&lt;/a&gt; 安装 kvm 基础包和管理工具&lt;/p&gt;&#10;&lt;p&gt;kvm相关安装包及其作用:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;qemu-kvm&lt;/code&gt; 主要的KVM程序包&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;python-virtinst&lt;/code&gt; 创建虚拟机所需要的命令行工具和程序库&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;virt-manager&lt;/code&gt; GUI虚拟机管理工具&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;virt-top&lt;/code&gt; 虚拟机统计命令&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;virt-viewer&lt;/code&gt; GUI连接程序，连接到已配置好的虚拟机&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;libvirt&lt;/code&gt; C语言工具包，提供libvirt服务&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;libvirt-client&lt;/code&gt; 为虚拟客户机提供的C语言工具包&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;virt-install&lt;/code&gt; 基于libvirt服务的虚拟机创建命令&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;bridge-utils&lt;/code&gt; 创建和管理桥接设备的工具&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启宿主机，以便加载 kvm 模块&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ reboot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看KVM模块是否被正确加载&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ lsmod &lt;span class="p"&gt;|&lt;/span&gt; grep kvm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kvm_intel &lt;span class="m"&gt;183621&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kvm &lt;span class="m"&gt;586948&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; kvm_intel&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;irqbypass &lt;span class="m"&gt;13503&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; kvm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置&lt;code&gt;libvirt&lt;/code&gt;以启用&lt;code&gt;TCP&lt;/code&gt;服务&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;LIBVIRTD_CONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/etc/libvirt/libvirtd.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;LIBVIRTD_ARGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;--listen&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同时修改&lt;code&gt;/etc/libvirt/libvirtd.conf&lt;/code&gt;配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;listen_tls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;listen_tcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;tcp_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;16509&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;listen_addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.0.0.0&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;auth_tcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;none&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;开启kvm服务，并且设置其开机自动启动&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl start libvirtd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; libvirtd&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看状态操作结果，如&lt;code&gt;Active: active (running)&lt;/code&gt;，说明运行情况良好&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl status libvirtd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;● libvirtd.service - Virtualization daemon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/usr/lib/systemd/system/libvirtd.service&lt;span class="p"&gt;;&lt;/span&gt; enabled&lt;span class="p"&gt;;&lt;/span&gt; vendor preset: enabled&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Active: active &lt;span class="o"&gt;(&lt;/span&gt;running&lt;span class="o"&gt;)&lt;/span&gt; since 日 2019-08-11 16:09:20 CST&lt;span class="p"&gt;;&lt;/span&gt; 30min ago&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Docs: man:libvirtd&lt;span class="o"&gt;(&lt;/span&gt;8&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://libvirt.org&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Main PID: &lt;span class="m"&gt;107953&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;libvirtd&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Tasks: &lt;span class="m"&gt;19&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;limit: 32768&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CGroup: /system.slice/libvirtd.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─105030 /usr/sbin/dnsmasq --conf-file&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script&lt;span class="o"&gt;=&lt;/span&gt;/usr/libexec/libvirt_leaseshelper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─105031 /usr/sbin/dnsmasq --conf-file&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script&lt;span class="o"&gt;=&lt;/span&gt;/usr/libexec/libvirt_leaseshelper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─107953 /usr/sbin/libvirtd --listen&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl is-enabled libvirtd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;enabled&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装webvirtmgr管理面板"&gt;&lt;a href="#%e5%ae%89%e8%a3%85webvirtmgr%e7%ae%a1%e7%90%86%e9%9d%a2%e6%9d%bf" class="header-anchor"&gt;&lt;/a&gt;安装WebVirtMgr管理面板&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr" target="_blank" rel="noopener"&#10; &gt;官方指南&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="更新源"&gt;&lt;a href="#%e6%9b%b4%e6%96%b0%e6%ba%90" class="header-anchor"&gt;&lt;/a&gt;更新源&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum install -y epel-release&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="安装依赖"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e4%be%9d%e8%b5%96" class="header-anchor"&gt;&lt;/a&gt;安装依赖&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum -y install gcc python-devel&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pip install numpy&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="拉取源码安装"&gt;&lt;a href="#%e6%8b%89%e5%8f%96%e6%ba%90%e7%a0%81%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;拉取源码安装&#10;&lt;/h3&gt;&lt;p&gt;拉取源码和安装环境&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git clone git://github.com/retspen/webvirtmgr.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; webvirtmgr&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo pip install -r requirements.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行安装文件并按照提示设置管理员账号密码&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./manage.py syncdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WARNING:root:No local_settings file found.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating tables ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table auth_permission&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table auth_group_permissions&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table auth_group&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table auth_user_groups&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table auth_user_user_permissions&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table auth_user&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table django_content_type&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table django_session&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table django_site&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table servers_compute&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table instance_instance&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creating table create_flavor&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You just installed Django&lt;span class="s1"&gt;&amp;#39;s auth system, which means you don&amp;#39;&lt;/span&gt;t have any superusers defined.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Would you like to create one now? &lt;span class="o"&gt;(&lt;/span&gt;yes/no&lt;span class="o"&gt;)&lt;/span&gt;: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter either &lt;span class="s2"&gt;&amp;#34;yes&amp;#34;&lt;/span&gt; or &lt;span class="s2"&gt;&amp;#34;no&amp;#34;&lt;/span&gt;: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Username &lt;span class="o"&gt;(&lt;/span&gt;leave blank to use &lt;span class="s1"&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;: root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Email address: 123@abc.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Password:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Password &lt;span class="o"&gt;(&lt;/span&gt;again&lt;span class="o"&gt;)&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Superuser created successfully.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Installing custom SQL ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Installing indexes ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Installed &lt;span class="m"&gt;6&lt;/span&gt; object&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; from &lt;span class="m"&gt;1&lt;/span&gt; fixture&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="发布到nginx"&gt;&lt;a href="#%e5%8f%91%e5%b8%83%e5%88%b0nginx" class="header-anchor"&gt;&lt;/a&gt;发布到Nginx&#10;&lt;/h3&gt;&lt;p&gt;拷贝文件到nginx web目录&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; .. &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cp -r webvirtmgr/ /var/www/webvirtmgr/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;创建配置文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/nginx/conf.d/webvirtmgr.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;内容为&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;server {&#10; listen 80 default_server;&#10;&#10; server_name $hostname;&#10; #access_log /var/log/nginx/webvirtmgr_access_log; &#10;&#10; location /static/ {&#10; root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var&#10; expires max;&#10; }&#10;&#10; location / {&#10; proxy_pass http://127.0.0.1:8000;&#10; proxy_set_header X-Real-IP $remote_addr;&#10; proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;&#10; proxy_set_header Host $host:$server_port;&#10; proxy_set_header X-Forwarded-Proto $scheme;&#10; proxy_connect_timeout 600;&#10; proxy_read_timeout 600;&#10; proxy_send_timeout 600;&#10; client_max_body_size 1024M; # Set higher depending on your needs &#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;拷贝一份副本并配置&lt;code&gt;nginx.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;写入配置&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;#user nobody;&#10;worker_processes 1;&#10;&#10;#error_log logs/error.log;&#10;#error_log logs/error.log notice;&#10;#error_log logs/error.log info;&#10;&#10;#pid logs/nginx.pid;&#10;&#10;&#10;events {&#10; worker_connections 1024;&#10;}&#10;&#10;&#10;http {&#10; include mime.types;&#10; default_type application/octet-stream;&#10; include /etc/nginx/conf.d/*.conf;&#10;&#10; sendfile on;&#10;&#10; keepalive_timeout 65;&#10;&#10; server {&#10; listen 80;&#10; server_name localhost;&#10;&#10; location / {&#10; root html;&#10; index index.html index.htm;&#10; }&#10;&#10; error_page 500 502 503 504 /50x.html;&#10; location = /50x.html {&#10; root html;&#10; }&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;重启nginx&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl restart nginx.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置用户组和权限&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ chown -R nginx:nginx /var/www/webvirtmgr&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="可能出现的报错address-already-in-use"&gt;&lt;a href="#%e5%8f%af%e8%83%bd%e5%87%ba%e7%8e%b0%e7%9a%84%e6%8a%a5%e9%94%99address-already-in-use" class="header-anchor"&gt;&lt;/a&gt;可能出现的报错——&lt;code&gt;Address already in use&lt;/code&gt;&#10;&lt;/h4&gt;&lt;p&gt;重启nginx服务出现错误，查看状态如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl status nginx.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;● nginx.service - The nginx HTTP and reverse proxy server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/usr/lib/systemd/system/nginx.service&lt;span class="p"&gt;;&lt;/span&gt; disabled&lt;span class="p"&gt;;&lt;/span&gt; vendor preset: disabled&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Active: failed &lt;span class="o"&gt;(&lt;/span&gt;Result: exit-code&lt;span class="o"&gt;)&lt;/span&gt; since 日 2019-08-11 12:52:42 CST&lt;span class="p"&gt;;&lt;/span&gt; 2s ago&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Process: &lt;span class="m"&gt;26188&lt;/span&gt; &lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/sbin/nginx &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1/FAILURE&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Process: &lt;span class="m"&gt;26185&lt;/span&gt; &lt;span class="nv"&gt;ExecStartPre&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/sbin/nginx -t &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0/SUCCESS&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Process: &lt;span class="m"&gt;26183&lt;/span&gt; &lt;span class="nv"&gt;ExecStartPre&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/rm -f /run/nginx.pid &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0/SUCCESS&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:40 localhost.localdomain nginx&lt;span class="o"&gt;[&lt;/span&gt;26188&lt;span class="o"&gt;]&lt;/span&gt;: nginx: &lt;span class="o"&gt;[&lt;/span&gt;emerg&lt;span class="o"&gt;]&lt;/span&gt; bind&lt;span class="o"&gt;()&lt;/span&gt; to 0.0.0.0:80 failed &lt;span class="o"&gt;(&lt;/span&gt;98: Address already in use&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:40 localhost.localdomain nginx&lt;span class="o"&gt;[&lt;/span&gt;26188&lt;span class="o"&gt;]&lt;/span&gt;: nginx: &lt;span class="o"&gt;[&lt;/span&gt;emerg&lt;span class="o"&gt;]&lt;/span&gt; bind&lt;span class="o"&gt;()&lt;/span&gt; to 0.0.0.0:80 failed &lt;span class="o"&gt;(&lt;/span&gt;98: Address already in use&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:41 localhost.localdomain nginx&lt;span class="o"&gt;[&lt;/span&gt;26188&lt;span class="o"&gt;]&lt;/span&gt;: nginx: &lt;span class="o"&gt;[&lt;/span&gt;emerg&lt;span class="o"&gt;]&lt;/span&gt; bind&lt;span class="o"&gt;()&lt;/span&gt; to 0.0.0.0:80 failed &lt;span class="o"&gt;(&lt;/span&gt;98: Address already in use&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:41 localhost.localdomain nginx&lt;span class="o"&gt;[&lt;/span&gt;26188&lt;span class="o"&gt;]&lt;/span&gt;: nginx: &lt;span class="o"&gt;[&lt;/span&gt;emerg&lt;span class="o"&gt;]&lt;/span&gt; bind&lt;span class="o"&gt;()&lt;/span&gt; to 0.0.0.0:80 failed &lt;span class="o"&gt;(&lt;/span&gt;98: Address already in use&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:42 localhost.localdomain nginx&lt;span class="o"&gt;[&lt;/span&gt;26188&lt;span class="o"&gt;]&lt;/span&gt;: nginx: &lt;span class="o"&gt;[&lt;/span&gt;emerg&lt;span class="o"&gt;]&lt;/span&gt; bind&lt;span class="o"&gt;()&lt;/span&gt; to 0.0.0.0:80 failed &lt;span class="o"&gt;(&lt;/span&gt;98: Address already in use&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:42 localhost.localdomain nginx&lt;span class="o"&gt;[&lt;/span&gt;26188&lt;span class="o"&gt;]&lt;/span&gt;: nginx: &lt;span class="o"&gt;[&lt;/span&gt;emerg&lt;span class="o"&gt;]&lt;/span&gt; still could not bind&lt;span class="o"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:42 localhost.localdomain systemd&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: nginx.service: control process exited, &lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:42 localhost.localdomain systemd&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: Failed to start The nginx HTTP and reverse proxy server.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:42 localhost.localdomain systemd&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: Unit nginx.service entered failed state.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8月 &lt;span class="m"&gt;11&lt;/span&gt; 12:52:42 localhost.localdomain systemd&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: nginx.service failed.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解决方法：杀掉占用80端口的进程（&lt;strong&gt;不管是不是nginx占用的&lt;/strong&gt;）&lt;/p&gt;&#10;&lt;p&gt;推荐使用&lt;code&gt;fuser&lt;/code&gt;命令快速杀掉占用端口的进程，CentOS可通过以下命令安装&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum install -y psmisc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;杀掉占用端口的进程&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ fuser -k 80/tcp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;80/tcp: &lt;span class="m"&gt;18869&lt;/span&gt; &lt;span class="m"&gt;18870&lt;/span&gt; &lt;span class="m"&gt;18871&lt;/span&gt; &lt;span class="m"&gt;18872&lt;/span&gt; &lt;span class="m"&gt;18873&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次重启即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ service nginx restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Redirecting to /bin/systemctl restart nginx.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="更新selinux策略"&gt;&lt;a href="#%e6%9b%b4%e6%96%b0selinux%e7%ad%96%e7%95%a5" class="header-anchor"&gt;&lt;/a&gt;更新&lt;code&gt;SELinux&lt;/code&gt;策略&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ /usr/sbin/setsebool httpd_can_network_connect &lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ chkconfig supervisord on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;注意：正在将请求转发到“systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; supervisord.service”。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="配置supervisor"&gt;&lt;a href="#%e9%85%8d%e7%bd%aesupervisor" class="header-anchor"&gt;&lt;/a&gt;配置&lt;code&gt;Supervisor&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;创建文件&lt;code&gt;/etc/supervisord.d/webvirtmgr.ini&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ /etc/supervisord.d/webvirtmgr.ini&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;加入配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;program:webvirtmgr&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;directory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/www/webvirtmgr&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;autostart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;autorestart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;logfile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/supervisor/webvirtmgr.log&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;log_stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;program:webvirtmgr-console&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;directory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/www/webvirtmgr&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;autostart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;autorestart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;stdout_logfile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/supervisor/webvirtmgr-console.log&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;redirect_stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="启动supervisor守护线程"&gt;&lt;a href="#%e5%90%af%e5%8a%a8supervisor%e5%ae%88%e6%8a%a4%e7%ba%bf%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;启动&lt;code&gt;supervisor&lt;/code&gt;守护线程&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl start supervisord.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置开启启动&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; supervisord.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="检查"&gt;&lt;a href="#%e6%a3%80%e6%9f%a5" class="header-anchor"&gt;&lt;/a&gt;检查&#10;&lt;/h3&gt;&lt;p&gt;查看端口占用，若&lt;code&gt;80&lt;/code&gt;、&lt;code&gt;8000&lt;/code&gt;、&lt;code&gt;6080&lt;/code&gt;已经监听则正常&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ netstat -lnpt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Active Internet connections &lt;span class="o"&gt;(&lt;/span&gt;only servers&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; 0.0.0.0:80 0.0.0.0:* LISTEN 102045/nginx: maste&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; 0.0.0.0:22 0.0.0.0:* LISTEN 9243/sshd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; 127.0.0.1:25 0.0.0.0:* LISTEN 9543/master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; 127.0.0.1:6010 0.0.0.0:* LISTEN 16011/sshd: root@pt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; 127.0.0.1:8000 0.0.0.0:* LISTEN 102430/python&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; 0.0.0.0:6080 0.0.0.0:* LISTEN 102429/python&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp6 &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; :::111 :::* LISTEN 1/systemd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp6 &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; :::22 :::* LISTEN 9243/sshd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp6 &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; ::1:25 :::* LISTEN 9543/master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp6 &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; ::1:6010 :::* LISTEN 16011/sshd: root@pt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="开放防火墙"&gt;&lt;a href="#%e5%bc%80%e6%94%be%e9%98%b2%e7%81%ab%e5%a2%99" class="header-anchor"&gt;&lt;/a&gt;开放防火墙&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;80/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ firewall-cmd --reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="访问web界面"&gt;&lt;a href="#%e8%ae%bf%e9%97%aeweb%e7%95%8c%e9%9d%a2" class="header-anchor"&gt;&lt;/a&gt;访问web界面&#10;&lt;/h3&gt;&lt;p&gt;访问虚拟机地址&lt;a class="link" href="http://192.168.133.128/login/" target="_blank" rel="noopener"&#10; &gt;http://192.168.133.128/login/&lt;/a&gt; 可见启动成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="294px" data-flex-grow="122" height="736" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1565514599088.png" width="902"&gt;&lt;/p&gt;&#10;&lt;h3 id="tcp方式连接宿主机"&gt;&lt;a href="#tcp%e6%96%b9%e5%bc%8f%e8%bf%9e%e6%8e%a5%e5%ae%bf%e4%b8%bb%e6%9c%ba" class="header-anchor"&gt;&lt;/a&gt;TCP方式连接宿主机&#10;&lt;/h3&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="409px" data-flex-grow="170" height="426" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1565514658149.png" width="727"&gt;&lt;/p&gt;&#10;&lt;p&gt;连接成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="606px" data-flex-grow="252" height="357" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1565514685892.png" width="902"&gt;&lt;/p&gt;&#10;</description></item><item><title>使用GitHub和DockerHub自动构建镜像</title><link>https://blog.fjy8018.top/archives/210/</link><pubDate>Wed, 31 Jul 2019 22:36:41 +0800</pubDate><guid>https://blog.fjy8018.top/archives/210/</guid><description>&lt;h2 id="环境"&gt;&lt;a href="#%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;环境&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;DockerHub&lt;/code&gt;账号、&lt;code&gt;GitHub&lt;/code&gt;账号&lt;/p&gt;&#10;&lt;h2 id="步骤"&gt;&lt;a href="#%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;步骤&#10;&lt;/h2&gt;&lt;h3 id="构建脚本"&gt;&lt;a href="#%e6%9e%84%e5%bb%ba%e8%84%9a%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;构建脚本&#10;&lt;/h3&gt;&lt;p&gt;此处以构建&lt;code&gt;mycat&lt;/code&gt;的&lt;code&gt;docker&lt;/code&gt;镜像为例，在本地准备好可以运行的构建脚本&lt;code&gt;Dockerfile&lt;/code&gt;，尽可能不使用准备好的配置文件，保证镜像的安全、纯净，并且利用环境变量配置精简构建脚本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;openjdk:8-jre&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;MAINTAINER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;fjy8018&lt;/span&gt; fjy8018@gmail.com&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Mycat 版本&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ENV&lt;/span&gt; MYCAT_VERSION 1.6-RELEASE&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ENV&lt;/span&gt; MYCAT_PKG Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/usr/local&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 缓存层&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; wget http://dl.mycat.io/&lt;span class="nv"&gt;$MYCAT_VERSION&lt;/span&gt;/&lt;span class="nv"&gt;$MYCAT_PKG&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; apt-get install -y procps &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; apt-get clean &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tar -zxf /usr/local/&lt;span class="nv"&gt;$MYCAT_PKG&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rm -rf /usr/local/&lt;span class="nv"&gt;$MYCAT_PKG&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;VOLUME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/usr/local/mycat/conf&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;8066&lt;/span&gt; &lt;span class="m"&gt;9066&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt; /usr/local/mycat/bin/mycat console&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="创建github仓库"&gt;&lt;a href="#%e5%88%9b%e5%bb%bagithub%e4%bb%93%e5%ba%93" class="header-anchor"&gt;&lt;/a&gt;创建GitHub仓库&#10;&lt;/h3&gt;&lt;p&gt;在&lt;code&gt;GitHub&lt;/code&gt;上创建对应的仓库，并推送&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564572008865.png" class="gallery-image" data-flex-basis="298px" data-flex-grow="124" height="838" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6dfd8192366.png" width="1043"&gt;&lt;/p&gt;&#10;&lt;h3 id="链接dockerhub与github"&gt;&lt;a href="#%e9%93%be%e6%8e%a5dockerhub%e4%b8%8egithub" class="header-anchor"&gt;&lt;/a&gt;链接DockerHub与GitHub&#10;&lt;/h3&gt;&lt;p&gt;登陆&lt;code&gt;DockerHub&lt;/code&gt;选择&lt;code&gt;repository&lt;/code&gt;新建仓库&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564572101153.png" class="gallery-image" data-flex-basis="1560px" data-flex-grow="650" height="180" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6ca75420080.png" width="1170"&gt;&lt;/p&gt;&#10;&lt;p&gt;首次链接可以参照&lt;a class="link" href="https://docs.docker.com/docker-hub/builds/link-source/" target="_blank" rel="noopener"&#10; &gt;指引&lt;/a&gt;操作，主要是做&lt;code&gt;OAuth &lt;/code&gt;授权&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564572489753.png" class="gallery-image" data-flex-basis="337px" data-flex-grow="140" height="827" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6b3cd010635.png" width="1162"&gt;&lt;/p&gt;&#10;&lt;h3 id="创建构建分支和标签"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e6%9e%84%e5%bb%ba%e5%88%86%e6%94%af%e5%92%8c%e6%a0%87%e7%ad%be" class="header-anchor"&gt;&lt;/a&gt;创建构建分支和标签&#10;&lt;/h3&gt;&lt;p&gt;连接&lt;code&gt;GitHub&lt;/code&gt;后可以选择需要构建的仓库，同时展开构建选项，可以指定不同分支构建出的标签，默认&lt;code&gt;master&lt;/code&gt;分支构建为&lt;code&gt;latest&lt;/code&gt;版本&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564580799275.png" class="gallery-image" data-flex-basis="255px" data-flex-grow="106" height="649" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6d5f8a31891.png" width="691"&gt;&lt;/p&gt;&#10;&lt;h3 id="触发构建"&gt;&lt;a href="#%e8%a7%a6%e5%8f%91%e6%9e%84%e5%bb%ba" class="header-anchor"&gt;&lt;/a&gt;触发构建&#10;&lt;/h3&gt;&lt;p&gt;第一次会自动触发构建，随后代码推送都会触发构建&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564572890867.png" class="gallery-image" data-flex-basis="604px" data-flex-grow="251" height="431" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6b319370352.png" width="1086"&gt;&lt;/p&gt;&#10;&lt;h3 id="构建结果"&gt;&lt;a href="#%e6%9e%84%e5%bb%ba%e7%bb%93%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;构建结果&#10;&lt;/h3&gt;&lt;p&gt;在管理页面可以查看构建时长和构建结果&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564573686044.png" class="gallery-image" data-flex-basis="358px" data-flex-grow="149" height="767" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6d559a89403.png" width="1147"&gt;&lt;/p&gt;&#10;&lt;h2 id="结果"&gt;&lt;a href="#%e7%bb%93%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;结果&#10;&lt;/h2&gt;&lt;h3 id="用户视角"&gt;&lt;a href="#%e7%94%a8%e6%88%b7%e8%a7%86%e8%a7%92" class="header-anchor"&gt;&lt;/a&gt;用户视角&#10;&lt;/h3&gt;&lt;p&gt;用户视角可以看到构建的GitHub仓库&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564583383061.png" class="gallery-image" data-flex-basis="347px" data-flex-grow="144" height="897" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6e89a952064.png" width="1297"&gt;&lt;/p&gt;&#10;&lt;p&gt;自动构建产生的分支&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564583424202.png" class="gallery-image" data-flex-basis="212px" data-flex-grow="88" height="478" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6be96a97983.png" width="424"&gt;&lt;/p&gt;&#10;&lt;p&gt;构建历史记录&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1564583451660.png" class="gallery-image" data-flex-basis="530px" data-flex-grow="221" height="598" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/07/31/5d41a6b6d671469520.png" width="1322"&gt;&lt;/p&gt;&#10;</description></item><item><title>DevOps GitLab CICD 实践3——CI文件编写</title><link>https://blog.fjy8018.top/archives/207/</link><pubDate>Wed, 03 Apr 2019 16:32:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/207/</guid><description>&lt;p&gt;前置步骤：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Docker 版 GitLab CICD 实践1——GitLab 部署 [[Docker 版 GitLab CICD 实践]]&lt;/li&gt;&#10;&lt;li&gt;Docker 版 GitLab CICD 实践2——Runner 部署 [[Docker 版 GitLab CICD 实践——Runner 部署]]&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="官方文档"&gt;&lt;a href="#%e5%ae%98%e6%96%b9%e6%96%87%e6%a1%a3" class="header-anchor"&gt;&lt;/a&gt;官方文档&#10;&lt;/h2&gt;&lt;p&gt;编写结构类似Jenkins pineline流水线&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html" target="_blank" rel="noopener"&#10; &gt;GitLab CI/CD Pipeline Configuration Reference&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h1 id="gitlab-cicd-pipeline-configuration-reference"&gt;&lt;a href="#gitlab-cicd-pipeline-configuration-reference" class="header-anchor"&gt;&lt;/a&gt;GitLab CI/CD Pipeline Configuration Reference&#10;&lt;/h1&gt;&lt;p&gt;GitLab CI/CD &lt;a class="link" href="https://docs.gitlab.com/ee/ci/pipelines.html" target="_blank" rel="noopener"&#10; &gt;pipelines&lt;/a&gt; are configured using a YAML file called &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; within each project.&lt;/p&gt;&#10;&lt;p&gt;The &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file defines the structure and order of the pipelines and determines:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;What to execute using &lt;a class="link" href="https://docs.gitlab.com/runner/" target="_blank" rel="noopener"&#10; &gt;GitLab Runner&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;What decisions to make when specific conditions are encountered. For example, when a process succeeds or fails.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This topic covers CI/CD pipeline configuration. For other CI/CD configuration information, see:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/variables/README.html" target="_blank" rel="noopener"&#10; &gt;GitLab CI/CD Variables&lt;/a&gt;, for configuring the environment the pipelines run in.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/configuration/advanced-configuration.html" target="_blank" rel="noopener"&#10; &gt;GitLab Runner advanced configuration&lt;/a&gt;, for configuring GitLab Runner.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;We have complete examples of configuring pipelines:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;For a quick introduction to GitLab CI, follow our &lt;a class="link" href="https://docs.gitlab.com/ee/ci/quick_start/README.html" target="_blank" rel="noopener"&#10; &gt;quick start guide&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;For a collection of examples, see &lt;a class="link" href="https://docs.gitlab.com/ee/ci/examples/README.html" target="_blank" rel="noopener"&#10; &gt;GitLab CI/CD Examples&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;To see a large &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file used in an enterprise, see the &lt;a class="link" href="https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.gitlab-ci.yml" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file for &lt;code&gt;gitlab-ce&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="目标"&gt;&lt;a href="#%e7%9b%ae%e6%a0%87" class="header-anchor"&gt;&lt;/a&gt;目标&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;maven项目自动打包&lt;/li&gt;&#10;&lt;li&gt;&lt;del&gt;自动测试&lt;/del&gt;&lt;/li&gt;&#10;&lt;li&gt;自动镜像构建并上传&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;官方参数表列出了作业的可用参数：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;关键词&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;描述&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#script" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;script&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;由Runner执行的Shell脚本。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#image" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;image&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;使用泊坞窗图像。也可用：&lt;code&gt;image:name&lt;/code&gt;和&lt;code&gt;image:entrypoint&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#services" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;services&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;使用docker services图像。也可用：&lt;code&gt;services:name&lt;/code&gt;，&lt;code&gt;services:alias&lt;/code&gt;，&lt;code&gt;services:entrypoint&lt;/code&gt;，和&lt;code&gt;services:command&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#before_script-and-after_script" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;before_script&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;覆盖在作业之前执行的一组命令。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#before_script-and-after_script" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;after_script&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;覆盖作业后执行的一组命令。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#stages" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;stages&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;定义管道中的阶段。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#stage" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;stage&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;定义作业阶段（默认值:) &lt;code&gt;test&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#onlyexcept-basic" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;only&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;创建作业时限制。也可用：&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#onlyexcept-advanced" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;only:refs&lt;/code&gt;，&lt;code&gt;only:kubernetes&lt;/code&gt;，&lt;code&gt;only:variables&lt;/code&gt;，和&lt;code&gt;only:changes&lt;/code&gt;&lt;/a&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#onlyexcept-basic" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;except&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在未创建作业时限制。也可用：&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#onlyexcept-advanced" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;except:refs&lt;/code&gt;，&lt;code&gt;except:kubernetes&lt;/code&gt;，&lt;code&gt;except:variables&lt;/code&gt;，和&lt;code&gt;except:changes&lt;/code&gt;&lt;/a&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#tags" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;tags&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;用于选择Runner的标签列表。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#allow_failure" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;allow_failure&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;让工作失败。失败的作业无助于提交状态。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#when" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;when&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;什么时候开始工作。也可用：&lt;code&gt;when:manual&lt;/code&gt;和&lt;code&gt;when:delayed&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#environment" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;environment&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;作业部署到的环境的名称。也可用：&lt;code&gt;environment:name&lt;/code&gt;，&lt;code&gt;environment:url&lt;/code&gt;，&lt;code&gt;environment:on_stop&lt;/code&gt;，和&lt;code&gt;environment:action&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#cache" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;cache&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;后续运行之间应缓存的文件列表。也可用：&lt;code&gt;cache:paths&lt;/code&gt;，&lt;code&gt;cache:key&lt;/code&gt;，&lt;code&gt;cache:untracked&lt;/code&gt;，和&lt;code&gt;cache:policy&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;artifacts&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;成功附加到作业的文件和目录列表。也可用：&lt;code&gt;artifacts:paths&lt;/code&gt;，&lt;code&gt;artifacts:name&lt;/code&gt;，&lt;code&gt;artifacts:untracked&lt;/code&gt;，&lt;code&gt;artifacts:when&lt;/code&gt;，&lt;code&gt;artifacts:expire_in&lt;/code&gt;，&lt;code&gt;artifacts:reports&lt;/code&gt;，和&lt;code&gt;artifacts:reports:junit&lt;/code&gt;。 在GitLab &lt;a class="link" href="https://about.gitlab.com/pricing/" target="_blank" rel="noopener"&#10; &gt;企业版&lt;/a&gt;，这些都是可供选择：&lt;code&gt;artifacts:reports:codequality&lt;/code&gt;，&lt;code&gt;artifacts:reports:sast&lt;/code&gt;，&lt;code&gt;artifacts:reports:dependency_scanning&lt;/code&gt;，&lt;code&gt;artifacts:reports:container_scanning&lt;/code&gt;，&lt;code&gt;artifacts:reports:dast&lt;/code&gt;，&lt;code&gt;artifacts:reports:license_management&lt;/code&gt;，和&lt;code&gt;artifacts:reports:performance&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#dependencies" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;dependencies&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;作业所依赖的其他作业，以便您可以在它们之间传递工件。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#coverage" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;coverage&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;给定作业的代码覆盖率设置。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#retry" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;retry&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在发生故障的情况下，可以自动重试作业的次数和次数。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#parallel" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;parallel&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;应该并行运行多少个作业实例。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#trigger-premium" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;trigger&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;定义下游管道触发器。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#include" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;include&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;允许此作业包含外部YAML文件。也可用：&lt;code&gt;include:local&lt;/code&gt;，&lt;code&gt;include:file&lt;/code&gt;，&lt;code&gt;include:template&lt;/code&gt;，和&lt;code&gt;include:remote&lt;/code&gt;。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#extends" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;extends&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;此作业将继承的配置条目。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#pages" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;pages&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;上传作业结果以用于GitLab Pages。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#variables" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;variables&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在作业级别定义作业变量。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;注：&lt;/strong&gt; 参数&lt;code&gt;types&lt;/code&gt;和&lt;code&gt;type&lt;/code&gt;被&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html#deprecated-parameters" target="_blank" rel="noopener"&#10; &gt;弃用&lt;/a&gt;。&lt;/p&gt;&#10;&lt;h2 id="参考"&gt;&lt;a href="#%e5%8f%82%e8%80%83" class="header-anchor"&gt;&lt;/a&gt;参考&#10;&lt;/h2&gt;&lt;p&gt;官方构建案例&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/examples/deploy_spring_boot_to_cloud_foundry/index.html" target="_blank" rel="noopener"&#10; &gt;Deploy a Spring Boot application to Cloud Foundry with GitLab CI/CD&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;参考其脚本&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h2 id="configure-gitlab-cicd-to-deploy-your-application"&gt;&lt;a href="#configure-gitlab-cicd-to-deploy-your-application" class="header-anchor"&gt;&lt;/a&gt;Configure GitLab CI/CD to deploy your application&#10;&lt;/h2&gt;&lt;p&gt;Now we need to add the GitLab CI/CD configuration file (&lt;a class="link" href="https://docs.gitlab.com/ee/ci/yaml/README.html" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;.gitlab-ci.yml&lt;/code&gt;&lt;/a&gt;) to our project’s root. This is how GitLab figures out what commands need to be run whenever code is pushed to our repository. We will add the following &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file to the root directory of the repository, GitLab will detect it automatically and run the steps defined once we push our code:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;java:8&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;stages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;deploy&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./mvnw package&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;target/demo-0.0.1-SNAPSHOT.jar&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;production&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deploy&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;curl --location &amp;#34;https://cli.run.pivotal.io/stable?release=linux64-binary&amp;amp;source=github&amp;#34; | tar zx&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./cf login -u $CF_USERNAME -p $CF_PASSWORD -a api.run.pivotal.io&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./cf push&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;master&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="配置"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;配置&#10;&lt;/h2&gt;&lt;h3 id="全局变量"&gt;&lt;a href="#%e5%85%a8%e5%b1%80%e5%8f%98%e9%87%8f" class="header-anchor"&gt;&lt;/a&gt;全局变量&#10;&lt;/h3&gt;&lt;p&gt;进入工程CI设置配置全局变量脚本，包含镜像仓库登陆名称、密码、打包名称等&lt;/p&gt;&#10;&lt;p&gt;配置全局变量目的在于配置脚本中&lt;strong&gt;不应该&lt;/strong&gt;包含密码等敏感信息&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46d8dd6a74.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554278638713.png" class="gallery-image" data-flex-basis="755px" data-flex-grow="314" height="507" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46d8dd6a74.png" width="1597"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;若希望使用GitLab内置环境变量，可参考官方表格&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/ci/variables/README.html" target="_blank" rel="noopener"&#10; &gt;GitLab CI/CD environment variables&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="ci脚本"&gt;&lt;a href="#ci%e8%84%9a%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;CI脚本&#10;&lt;/h3&gt;&lt;p&gt;结合可用参数和样例配置，根据已经存在的SpringBoot项目编写响应的CI脚本&lt;code&gt;.gitlab-ci.yml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;docker:stable&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;docker:dind&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DOCKER_DRIVER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;overlay&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SPRING_PROFILES_ACTIVE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gitlab-ci&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;stages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;package&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;maven-build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;maven:3-jdk-8&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mvn package -B&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;target/*.jar&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;docker-build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;package&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;docker build -t $CONTAINER_IMAGE:latest .&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PASS&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;docker push $CONTAINER_IMAGE:latest&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该脚本对于满足脚本目标的工程都可复用，若需要测试，则增加相关的测试步骤即可&lt;/p&gt;&#10;&lt;p&gt;此处由于工程包含外部依赖关系，不在构建时测试&lt;/p&gt;&#10;&lt;h3 id="自动构建"&gt;&lt;a href="#%e8%87%aa%e5%8a%a8%e6%9e%84%e5%bb%ba" class="header-anchor"&gt;&lt;/a&gt;自动构建&#10;&lt;/h3&gt;&lt;p&gt;默认的触发构建事件为&lt;code&gt;commit&lt;/code&gt;等&lt;/p&gt;&#10;&lt;p&gt;触发后会自动执行任务&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e940608c.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554278973797.png" class="gallery-image" data-flex-basis="1609px" data-flex-grow="670" height="194" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e940608c.png" width="1301"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e93a1220.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554279027476.png" class="gallery-image" data-flex-basis="621px" data-flex-grow="259" height="222" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e93a1220.png" width="575"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Maven自动触发构建，自动镜像打包&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e9490c9f.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554279219445.png" class="gallery-image" data-flex-basis="319px" data-flex-grow="132" height="619" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e9490c9f.png" width="823"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e935f2c2.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554279272711.png" class="gallery-image" data-flex-basis="438px" data-flex-grow="182" height="309" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e935f2c2.png" width="565"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;自动上传（推送）镜像&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e93137c7.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554279311054.png" class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="439" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e93137c7.png" width="745"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="执行结果"&gt;&lt;a href="#%e6%89%a7%e8%a1%8c%e7%bb%93%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;执行结果&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e921bcd7.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554279508887.png" class="gallery-image" data-flex-basis="2119px" data-flex-grow="883" height="149" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e921bcd7.png" width="1316"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;若执行失败则会发送邮件给开发人员&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e94b500e.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554279616575.png" class="gallery-image" data-flex-basis="405px" data-flex-grow="168" height="945" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/5ca46e94b500e.png" width="1595"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;CICD全套流程目标实现！&lt;/p&gt;&#10;&lt;h2 id="总结"&gt;&lt;a href="#%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;总结&#10;&lt;/h2&gt;&lt;p&gt;不管使用GitLab CICD或者是使用Jenkins+Ansible的方式，目标都在于践行DevOps，打通开发与运维流程，一旦配置好CICD流程，往后开发人员便不再操心打包、构建等操作，可以专注开发&lt;/p&gt;&#10;</description></item><item><title>DevOps GitLab CICD 实践2——Runner 部署</title><link>https://blog.fjy8018.top/archives/206/</link><pubDate>Wed, 03 Apr 2019 16:31:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/206/</guid><description>&lt;p&gt;前置步骤：&lt;a class="link" href="https://blog.fjy8018.top/archives/205/" &gt;DevOps GitLab CICD 实践1——GitLab 部署&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="官方文档"&gt;&lt;a href="#%e5%ae%98%e6%96%b9%e6%96%87%e6%a1%a3" class="header-anchor"&gt;&lt;/a&gt;官方文档&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/install/docker.html" target="_blank" rel="noopener"&#10; &gt;文档地址&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;虽然有官方指引，但个人感觉指引的不够清晰，导致初次配置可能频繁失败&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h1 id="run-gitlab-runner-in-a-container"&gt;&lt;a href="#run-gitlab-runner-in-a-container" class="header-anchor"&gt;&lt;/a&gt;Run GitLab Runner in a container&#10;&lt;/h1&gt;&lt;p&gt;This is how you can run GitLab Runner inside a Docker container.&lt;/p&gt;&#10;&lt;h2 id="general-gitlab-runner-docker-image-usage"&gt;&lt;a href="#general-gitlab-runner-docker-image-usage" class="header-anchor"&gt;&lt;/a&gt;General GitLab Runner Docker image usage&#10;&lt;/h2&gt;&lt;p&gt;GitLab Runner Docker images (based on &lt;a class="link" href="https://docs.gitlab.com/runner/install/docker.html#docker-images" target="_blank" rel="noopener"&#10; &gt;Ubuntu or Alpine Linux&lt;/a&gt;) are designed as wrappers around the standard &lt;code&gt;gitlab-runner&lt;/code&gt; command, like if GitLab Runner was installed directly on the host.&lt;/p&gt;&#10;&lt;p&gt;The general rule is that every GitLab Runner command that normally would be executed as:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gitlab-runner &lt;span class="o"&gt;[&lt;/span&gt;Runner &lt;span class="nb"&gt;command&lt;/span&gt; and options...&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;can be executed with:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run &lt;span class="o"&gt;[&lt;/span&gt;chosen docker options...&lt;span class="o"&gt;]&lt;/span&gt; gitlab/gitlab-runner &lt;span class="o"&gt;[&lt;/span&gt;Runner &lt;span class="nb"&gt;command&lt;/span&gt; and options...&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For example, getting the top-level help information for GitLab Runner command could be executed as:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run --rm -t -i gitlab/gitlab-runner --help&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gitlab-runner - a GitLab Runner&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;USAGE:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gitlab-runner &lt;span class="o"&gt;[&lt;/span&gt;global options&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; options&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;arguments...&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VERSION:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 10.7.0 &lt;span class="o"&gt;(&lt;/span&gt;7c273476&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;...&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In short, the &lt;code&gt;gitlab-runner&lt;/code&gt; part of the command is replaced with &lt;code&gt;docker run [docker options] gitlab/gitlab-runner&lt;/code&gt;, while the rest of Runner’s command stays as it is described in the &lt;a class="link" href="https://docs.gitlab.com/runner/register/index.html" target="_blank" rel="noopener"&#10; &gt;register documentation&lt;/a&gt;. The only difference is that the &lt;code&gt;gitlab-runner&lt;/code&gt; command is executed inside of a Docker container.&lt;/p&gt;&#10;&lt;h2 id="docker-image-installation-and-configuration"&gt;&lt;a href="#docker-image-installation-and-configuration" class="header-anchor"&gt;&lt;/a&gt;Docker image installation and configuration&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Install Docker first:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; curl -sSL https://get.docker.com/ &lt;span class="p"&gt;|&lt;/span&gt; sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;You need to mount a config volume into the &lt;code&gt;gitlab-runner&lt;/code&gt; container to be used for configs and other resources:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; docker run -d --name gitlab-runner --restart always &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /srv/gitlab-runner/config:/etc/gitlab-runner &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gitlab/gitlab-runner:latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; On macOS, use &lt;code&gt;/Users/Shared&lt;/code&gt; instead of &lt;code&gt;/srv&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Or, you can use a config container to mount your custom data volume:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; docker run -d --name gitlab-runner-config &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /etc/gitlab-runner &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; busybox:latest &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /bin/true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then, run the Runner:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; docker run -d --name gitlab-runner --restart always &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --volumes-from gitlab-runner-config &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gitlab/gitlab-runner:latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Register the runner you just launched by following the instructions in the &lt;a class="link" href="https://docs.gitlab.com/runner/register/index.html#docker" target="_blank" rel="noopener"&#10; &gt;Docker section of Registering Runners&lt;/a&gt;. The runner won’t pick up any jobs until it’s registered.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="安装步骤"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;安装步骤&#10;&lt;/h2&gt;&lt;h3 id="获取gitlab-runner秘钥"&gt;&lt;a href="#%e8%8e%b7%e5%8f%96gitlab-runner%e7%a7%98%e9%92%a5" class="header-anchor"&gt;&lt;/a&gt;获取Gitlab Runner秘钥&#10;&lt;/h3&gt;&lt;p&gt;可以通过Gitlab管理员账号获取，也可以让每一个用户自行配置&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;普通用户查看秘钥&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;进入任意一个仓库的设置中，查看CICD配置&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d8f7ec77.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554266163188.png" class="gallery-image" data-flex-basis="148px" data-flex-grow="61" height="776" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d8f7ec77.png" width="480"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;准备注册专用Runner令牌&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d8ff2aa9.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554266217632.png" class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="612" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d8ff2aa9.png" width="457"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;管理员查看令牌&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;进入总设置页面，配置全局Runner令牌&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d907392b.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554266287842.png" class="gallery-image" data-flex-basis="913px" data-flex-grow="380" height="446" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d907392b.png" width="1698"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="runner注册"&gt;&lt;a href="#runner%e6%b3%a8%e5%86%8c" class="header-anchor"&gt;&lt;/a&gt;Runner注册&#10;&lt;/h3&gt;&lt;p&gt;由于Runner一般运行复杂构建、打包任务，推荐配置在性能、带宽更大的机房&lt;/p&gt;&#10;&lt;h4 id="准备docker环境"&gt;&lt;a href="#%e5%87%86%e5%a4%87docker%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;准备Docker环境&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -sSL https://get.docker.com/ &lt;span class="p"&gt;|&lt;/span&gt; sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl start docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="注册"&gt;&lt;a href="#%e6%b3%a8%e5%86%8c" class="header-anchor"&gt;&lt;/a&gt;注册&#10;&lt;/h4&gt;&lt;p&gt;可以根据需要选择注册Runner类型&lt;/p&gt;&#10;&lt;p&gt;同时，为了方便配置，使用单行注册并且关闭交互&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.gitlab.com/runner/register/index.html#one-line-registration-command" target="_blank" rel="noopener"&#10; &gt;单行注册官方文档&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;命令说明：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;挂载的目的是为了将注册后的配置文件持久化，用于运行容器&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--rm&lt;/code&gt;指定容器运行结束后自动删除停止的容器&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-it&lt;/code&gt;指定使用命令行交互方式运行，便于查看注册结果&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker run --rm -it &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /www/wwwroot/gitlab/srv/gitlab-runner/config:/etc/gitlab-runner &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gitlab/gitlab-runner:alpine-v11.8.0 register &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --non-interactive &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --executor &lt;span class="s2"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --docker-image docker:stable &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --url &lt;span class="s2"&gt;&amp;#34;Gitlab URL&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --registration-token &lt;span class="s2"&gt;&amp;#34;令牌&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --description &lt;span class="s2"&gt;&amp;#34;描述&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --tag-list &lt;span class="s2"&gt;&amp;#34;标签1,标签2&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --run-untagged &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --docker-privileged &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --locked&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注册成功提示&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d8cb31ce.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554277014308.png" class="gallery-image" data-flex-basis="3007px" data-flex-grow="1253" height="81" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d8cb31ce.png" width="1015"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;此时管理面板显示新的Runner已经注册&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d8db2078.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554277086811.png" class="gallery-image" data-flex-basis="663px" data-flex-grow="276" height="484" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d8db2078.png" width="1339"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="runner-启动"&gt;&lt;a href="#runner-%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;Runner 启动&#10;&lt;/h3&gt;&lt;p&gt;挂载本地配置信息并启动Runner&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker run -d --name gitlab-runner --restart always &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;-v /www/wwwroot/gitlab/srv/gitlab-runner/config:/etc/gitlab-runner &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gitlab/gitlab-runner:alpine-v11.8.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时可见Runner已经保持和Gitlab的联系&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d8c56a69.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554277457677.png" class="gallery-image" data-flex-basis="2026px" data-flex-grow="844" height="158" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d8c56a69.png" width="1334"&gt;&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>DevOps GitLab CICD 实践1——GitLab 部署</title><link>https://blog.fjy8018.top/archives/205/</link><pubDate>Wed, 03 Apr 2019 16:30:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/205/</guid><description>&lt;h2 id="配置目标"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e7%9b%ae%e6%a0%87" class="header-anchor"&gt;&lt;/a&gt;配置目标&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;邮件提示&lt;/li&gt;&#10;&lt;li&gt;GitHub第三方授权登陆&lt;/li&gt;&#10;&lt;li&gt;GitLab Runner&lt;/li&gt;&#10;&lt;li&gt;Docker私服注册&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="官方介绍"&gt;&lt;a href="#%e5%ae%98%e6%96%b9%e4%bb%8b%e7%bb%8d" class="header-anchor"&gt;&lt;/a&gt;官方介绍&#10;&lt;/h2&gt;&lt;p&gt;目前微服务盛行环境下，服务部署优先考虑Docker方式，便于迁移和弹性伸缩&lt;/p&gt;&#10;&lt;p&gt;官方镜像介绍 &lt;a class="link" href="https://docs.gitlab.com/omnibus/docker/" target="_blank" rel="noopener"&#10; &gt;GitLab Docker images&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h1 id="gitlab-docker-images"&gt;&lt;a href="#gitlab-docker-images" class="header-anchor"&gt;&lt;/a&gt;GitLab Docker images&#10;&lt;/h1&gt;&lt;p&gt;Both GitLab CE and EE are in Docker Hub:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://registry.hub.docker.com/u/gitlab/gitlab-ce/" target="_blank" rel="noopener"&#10; &gt;GitLab CE Docker image&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://registry.hub.docker.com/u/gitlab/gitlab-ee/" target="_blank" rel="noopener"&#10; &gt;GitLab EE Docker image&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The GitLab Docker images are monolithic images of GitLab running all the necessary services on a single container.&lt;/p&gt;&#10;&lt;p&gt;In the following examples we are using the image of GitLab CE. To use GitLab EE instead of GitLab CE, replace the image name to &lt;code&gt;gitlab/gitlab-ee:latest&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;If you want to use the latest RC image, use &lt;code&gt;gitlab/gitlab-ce:rc&lt;/code&gt; or &lt;code&gt;gitlab/gitlab-ee:rc&lt;/code&gt; for GitLab CE and GitLab EE respectively.&lt;/p&gt;&#10;&lt;p&gt;The GitLab Docker images can be run in multiple ways:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/docker/#run-the-image" target="_blank" rel="noopener"&#10; &gt;Run the image in Docker Engine&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/docker/#install-gitlab-into-a-cluster" target="_blank" rel="noopener"&#10; &gt;Install GitLab into a cluster&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose" target="_blank" rel="noopener"&#10; &gt;Install GitLab using docker-compose&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="docker-compose-脚本"&gt;&lt;a href="#docker-compose-%e8%84%9a%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;docker-compose 脚本&#10;&lt;/h2&gt;&lt;p&gt;此处选择社区版(CE)安装，同时为了便于参数配置，使用&lt;code&gt;docker-compose&lt;/code&gt;方式编写脚本文件&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h2 id="install-gitlab-using-docker-compose"&gt;&lt;a href="#install-gitlab-using-docker-compose" class="header-anchor"&gt;&lt;/a&gt;Install GitLab using docker-compose&#10;&lt;/h2&gt;&lt;p&gt;With &lt;a class="link" href="https://docs.docker.com/compose/" target="_blank" rel="noopener"&#10; &gt;Docker compose&lt;/a&gt; you can easily configure, install, and upgrade your Docker-based GitLab installation.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.docker.com/compose/install/" target="_blank" rel="noopener"&#10; &gt;Install&lt;/a&gt; Docker Compose&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Create a &lt;code&gt;docker-compose.yml&lt;/code&gt; file (or &lt;a class="link" href="https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/docker/docker-compose.yml" target="_blank" rel="noopener"&#10; &gt;download an example&lt;/a&gt;):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;web&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gitlab/gitlab-ce:latest&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gitlab.example.com&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;GITLAB_OMNIBUS_CONFIG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; external_url &amp;#39;https://gitlab.example.com&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; # Add any other gitlab.rb configuration here, each on its own line&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;80:80&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;443:443&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;22:22&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;/srv/gitlab/config:/etc/gitlab&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;/srv/gitlab/logs:/var/log/gitlab&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;/srv/gitlab/data:/var/opt/gitlab&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Make sure you are in the same directory as &lt;code&gt;docker-compose.yml&lt;/code&gt; and run &lt;code&gt;docker-compose up -d&lt;/code&gt; to start GitLab&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Read &lt;a class="link" href="https://docs.gitlab.com/omnibus/docker/#pre-configure-docker-container" target="_blank" rel="noopener"&#10; &gt;“Pre-configure Docker container”&lt;/a&gt; to see how the &lt;code&gt;GITLAB_OMNIBUS_CONFIG&lt;/code&gt; variable works.&lt;/p&gt;&#10;&lt;p&gt;Below is another &lt;code&gt;docker-compose.yml&lt;/code&gt; example with GitLab running on a custom HTTP and SSH port. Notice how the &lt;code&gt;GITLAB_OMNIBUS_CONFIG&lt;/code&gt; variables match the &lt;code&gt;ports&lt;/code&gt; section:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;web&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gitlab/gitlab-ce:latest&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gitlab.example.com&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;GITLAB_OMNIBUS_CONFIG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; external_url &amp;#39;http://gitlab.example.com:9090&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;gitlab_shell_ssh_port&amp;#39;] = 2224&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;9090:9090&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;2224:22&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;/srv/gitlab/config:/etc/gitlab&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;/srv/gitlab/logs:/var/log/gitlab&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;/srv/gitlab/data:/var/opt/gitlab&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is the same as using &lt;code&gt;--publish 9090:9090 --publish 2224:22&lt;/code&gt;.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;官方提示说明Docker CE版基于&lt;code&gt;Omnibus&lt;/code&gt;版本，故环境配置也可参考相关文档&lt;/p&gt;&#10;&lt;h3 id="omnibus文档目录"&gt;&lt;a href="#omnibus%e6%96%87%e6%a1%a3%e7%9b%ae%e5%bd%95" class="header-anchor"&gt;&lt;/a&gt;Omnibus文档目录&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;h4 id="installation-and-configuration-using-omnibus-package"&gt;&lt;a href="#installation-and-configuration-using-omnibus-package" class="header-anchor"&gt;&lt;/a&gt;Installation and Configuration using omnibus package&#10;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This section describes the commonly used configuration settings. Check &lt;a class="link" href="https://docs.gitlab.com/omnibus/README.html#configuring" target="_blank" rel="noopener"&#10; &gt;configuration&lt;/a&gt; section of the documentation for complete configuration settings.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Installing GitLab&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/manual_install.html" target="_blank" rel="noopener"&#10; &gt;Manually downloading and installing a GitLab package&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab" target="_blank" rel="noopener"&#10; &gt;Setting up a domain name/URL&lt;/a&gt; for the GitLab Instance so that it can be accessed easily&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https" target="_blank" rel="noopener"&#10; &gt;Enabling HTTPS&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/settings/smtp.html#smtp-settings" target="_blank" rel="noopener"&#10; &gt;Enabling notification EMails&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Enabling replying via email&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/ce/administration/reply_by_email_postfix_setup.html" target="_blank" rel="noopener"&#10; &gt;Installing and configuring postfix&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Enabling container registry on GitLab&#10;&lt;ul&gt;&#10;&lt;li&gt;You will require SSL certificates for the domain used for container registry&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Enabling GitLab Pages&#10;&lt;ul&gt;&#10;&lt;li&gt;If you want HTTPS enabled, you will have to get wildcard certificates&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/ee/integration/elasticsearch.html" target="_blank" rel="noopener"&#10; &gt;Enabling Elasticsearch&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/gitlab-mattermost/README.html" target="_blank" rel="noopener"&#10; &gt;GitLab Mattermost&lt;/a&gt; Set up the Mattermost messaging app that ships with Omnibus GitLab package.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/ce/administration/monitoring/performance/prometheus.html" target="_blank" rel="noopener"&#10; &gt;GitLab Prometheus&lt;/a&gt; Set up the Prometheus monitoring included in the Omnibus GitLab package.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/roles/README.html" target="_blank" rel="noopener"&#10; &gt;GitLab High Availability Roles&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;结合配置目标编写yaml文件&lt;/p&gt;&#10;&lt;p&gt;注意：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;此处邮件使用163邮箱（官方没有提供163邮箱支持案例）&lt;/li&gt;&#10;&lt;li&gt;Docker私服公钥执行从私服上获取&lt;/li&gt;&#10;&lt;li&gt;由于特殊原因，目标配置未启动SSL安全连接，但GitLab可以通过简单配置支持SSL并&lt;strong&gt;自动更新证书&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.gitlab.com/omnibus/settings/ssl.html#lets-encrypthttpsletsencryptorg-integration" target="_blank" rel="noopener"&#10; &gt;配置文档&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;h3 id="lets-encrypt-integration"&gt;&lt;a href="#lets-encrypt-integration" class="header-anchor"&gt;&lt;/a&gt;&lt;a class="link" href="https://letsencrypt.org/" target="_blank" rel="noopener"&#10; &gt;Let’s Encrypt&lt;/a&gt; Integration&#10;&lt;/h3&gt;&lt;h4 id="primary-gitlab-instance"&gt;&lt;a href="#primary-gitlab-instance" class="header-anchor"&gt;&lt;/a&gt;Primary GitLab Instance&#10;&lt;/h4&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Introduced in GitLab version &lt;strong&gt;10.5&lt;/strong&gt; and disabled by default. Enabled by default in GitLab version &lt;strong&gt;10.7&lt;/strong&gt; and later if &lt;code&gt;external_url&lt;/code&gt; is set with the &lt;em&gt;https&lt;/em&gt;protocol and no certificates are configured.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: In order for Let’s Encrypt verification to work correctly, ports 80 and 443 will need to be accessible to the Let’s Encrypt servers that run the validation. Also note that the validation currently &lt;a class="link" href="https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3580" target="_blank" rel="noopener"&#10; &gt;does not work with non-standard ports&lt;/a&gt;.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Caution&lt;/strong&gt; Administrators installing or upgrading to GitLab version &lt;strong&gt;10.7&lt;/strong&gt; or later and do not plan on using &lt;strong&gt;Let’s Encrypt&lt;/strong&gt; should set the following in &lt;code&gt;/etc/gitlab/gitlab.rb&lt;/code&gt; to disable:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;letsencrypt[&amp;#39;enable&amp;#39;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Add the following entries to &lt;code&gt;/etc/gitlab/gitlab.rb&lt;/code&gt; to enable &lt;strong&gt;Let’s Encrypt&lt;/strong&gt; support for the primary domain:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;letsencrypt[&amp;#39;enable&amp;#39;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true # GitLab 10.5 and 10.6 require this option&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;external_url&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://gitlab.example.com&amp;#34;&#9; # Must use https protocol&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;letsencrypt[&amp;#39;contact_emails&amp;#39;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;[&amp;#39;foo@email.com&amp;#39;] # Optional&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;生成163邮箱授权密码&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d909bef7.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554263126117.png" class="gallery-image" data-flex-basis="397px" data-flex-grow="165" height="567" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d909bef7.png" width="938"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;生成GitHub授权秘钥&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d8fef5f8.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554262788318.png" class="gallery-image" data-flex-basis="945px" data-flex-grow="393" height="311" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d8fef5f8.png" width="1225"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca46d9022cde.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554262821319.png" class="gallery-image" data-flex-basis="336px" data-flex-grow="140" height="559" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca46d9022cde.png" width="784"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;最终配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gitlab&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;GITLAB_OMNIBUS_CONFIG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; external_url &amp;#39;外部访问地址&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;gitlab_shell_ssh_port&amp;#39;] = 外部SSH端口&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; registry_external_url &amp;#39;Docker私服地址&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; registry_nginx[&amp;#39;ssl_certificate&amp;#39;] = &amp;#34;Docker 私服CA证书 crt文件&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; registry_nginx[&amp;#39;ssl_certificate_key&amp;#39;] = &amp;#34;Docker 私服公钥 pem文件&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_enable&amp;#39;] = true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_address&amp;#39;] = &amp;#34;smtp.163.com&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_port&amp;#39;] = 465&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_user_name&amp;#39;] = &amp;#34;邮件发送者名称&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;gitlab_email_from&amp;#39;] = &amp;#39;邮件发送地址&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_password&amp;#39;] = &amp;#34;授权密码&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_domain&amp;#39;] = &amp;#34;163.com&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_authentication&amp;#39;] = &amp;#34;login&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_enable_starttls_auto&amp;#39;] = true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;smtp_tls&amp;#39;] = true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;omniauth_enabled&amp;#39;] = true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;omniauth_allow_single_sign_on&amp;#39;] = true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;omniauth_block_auto_created_users&amp;#39;] = true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; gitlab_rails[&amp;#39;omniauth_providers&amp;#39;] = [&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;name&amp;#34; =&amp;gt; &amp;#34;github&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;app_id&amp;#34; =&amp;gt; &amp;#34;Client ID&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;app_secret&amp;#34; =&amp;gt; &amp;#34;Client Secret&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;url&amp;#34; =&amp;gt; &amp;#34;https://github.com/&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;args&amp;#34; =&amp;gt; { &amp;#34;scope&amp;#34; =&amp;gt; &amp;#34;user:email&amp;#34; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gitlab/gitlab-ce:latest&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gitlab.fjy8018.top&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;always&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;devops-service-bridge&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;8443:443&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;8099:8099&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;8022:22&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./srv/gitlab/config:/etc/gitlab&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./srv/gitlab/logs:/var/log/gitlab&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./srv/gitlab/data:/var/opt/gitlab&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/etc/docker/certs.d:/etc/docker/certs.d&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;devops-service-bridge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;bridge&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>阿里云CDN + nginx多级代理获取客户端IP</title><link>https://blog.fjy8018.top/archives/204/</link><pubDate>Wed, 03 Apr 2019 10:01:44 +0800</pubDate><guid>https://blog.fjy8018.top/archives/204/</guid><description>&lt;h2 id="无nginx代理场景"&gt;&lt;a href="#%e6%97%a0nginx%e4%bb%a3%e7%90%86%e5%9c%ba%e6%99%af" class="header-anchor"&gt;&lt;/a&gt;无Nginx代理场景&#10;&lt;/h2&gt;&lt;p&gt;业务层通过获取请求头参数即可拿到客户端IP&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRemoteAddr&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="一级nginx代理"&gt;&lt;a href="#%e4%b8%80%e7%ba%a7nginx%e4%bb%a3%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;一级Nginx代理&#10;&lt;/h2&gt;&lt;p&gt;使用代理后直接读取请求头参数会读取到代理服务器的IP地址，而非真实客户端IP&lt;/p&gt;&#10;&lt;p&gt;解决方法是添加Nginx请求头参数提前保存客户端IP&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nginx.conf&lt;/code&gt;配置加入内容&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;location / {&#10; ...&#10; # IP地址转发&#10; proxy_set_header X-Real-IP $remote_addr;&#10; proxy_set_header X-Real-Port $remote_port;&#10; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#10; }&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;业务层读取nginx配置的请求头参数即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getIpAddr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpServletRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;X-Real-IP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Proxy-Client-IP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【Proxy-Client-IP】 {}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;WL-Proxy-Client-IP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【WL-Proxy-Client-IP】{}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;X-Forwarded-For&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【X-Forwarded-For】{}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRemoteAddr&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【unknown】{}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="多级nginx代理"&gt;&lt;a href="#%e5%a4%9a%e7%ba%a7nginx%e4%bb%a3%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;多级Nginx代理&#10;&lt;/h2&gt;&lt;p&gt;若存在多级Nginx代理，则需要在第一级代理时获取客户端IP，在后续代理逐层传递&lt;/p&gt;&#10;&lt;p&gt;第一级代理配置同上，第N级代理配置&lt;code&gt;nginx.conf&lt;/code&gt;如下&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;location /{&#10; # IP地址转发&#10; proxy_set_header X-Real-IP $X-Real-IP;&#10; proxy_set_header X-Real-Port $X-Real-Port;&#10; proxy_set_header X-Forwarded-For $X-Forwarded-For;&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;业务层保持不变即可读取到传递的IP地址&lt;/p&gt;&#10;&lt;h2 id="阿里云cdn转发"&gt;&lt;a href="#%e9%98%bf%e9%87%8c%e4%ba%91cdn%e8%bd%ac%e5%8f%91" class="header-anchor"&gt;&lt;/a&gt;阿里云CDN转发&#10;&lt;/h2&gt;&lt;p&gt;在已经存在nginx代理的场景下，加入CDN后源客户端IP在CDN处被转发，故第一级nginx代理使用&lt;code&gt;$remote_addr&lt;/code&gt;参数读取到的是CDN服务的地址，而根据一般约定，CDN转发会将IP地址存放在&lt;code&gt;X-Forwarded-For&lt;/code&gt;参数下&lt;/p&gt;&#10;&lt;p&gt;修改顶级Nginx配置以支持优先获取CDN代理地址，也可以通过修改业务层读取优先级实现&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;location / {&#10; ...&#10; # IP地址转发&#10; # proxy_set_header X-Real-IP $remote_addr;&#10; # proxy_set_header X-Real-Port $remote_port;&#10; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#10; }&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;但经过对阿里云CDN测试，发现&lt;code&gt;X-Forwarded-For&lt;/code&gt;下不仅包含真实客户端IP也包含CDN服务IP，故业务层需要做一定的处理进行区分&lt;/p&gt;&#10;&lt;p&gt;如图，第一个为真实客户端IP，第二个为CDN代理IP&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2019/04/03/5ca413f53a191.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="1554256476626.png" class="gallery-image" data-flex-basis="1960px" data-flex-grow="817" height="47" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2019/04/03/5ca413f53a191.png" width="384"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getIpAddr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpServletRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;X-Real-IP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Proxy-Client-IP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【Proxy-Client-IP】 {}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;WL-Proxy-Client-IP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【WL-Proxy-Client-IP】{}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;X-Forwarded-For&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;,&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 通过阿里云CDN转发后可能读取到2个IP地址&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cdnMutilIp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;,&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cdnMutilIp&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【X-Forwarded-For】{}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; unknown &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRemoteAddr&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;【unknown】{}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Linux面板APPNODE与宝塔横评</title><link>https://blog.fjy8018.top/archives/188/</link><pubDate>Sun, 09 Dec 2018 16:35:04 +0800</pubDate><guid>https://blog.fjy8018.top/archives/188/</guid><description>&lt;h2 id="宝塔"&gt;&lt;a href="#%e5%ae%9d%e5%a1%94" class="header-anchor"&gt;&lt;/a&gt;宝塔&#10;&lt;/h2&gt;&lt;p&gt;宝塔从2017年底开始接触并全面在自己服务器上推广使用，到目前为止手上的服务器需要建站数据库之类的都部署了宝塔，同时开发测试环境的服务器为了方便管理也部署了宝塔，可以说用了也算比较长时间了，宝塔的优势也比较明显&lt;/p&gt;&#10;&lt;h3 id="1-界面简单逻辑明确"&gt;&lt;a href="#1-%e7%95%8c%e9%9d%a2%e7%ae%80%e5%8d%95%e9%80%bb%e8%be%91%e6%98%8e%e7%a1%ae" class="header-anchor"&gt;&lt;/a&gt;1. 界面简单，逻辑明确&#10;&lt;/h3&gt;&lt;p&gt;系统信息一目了然&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode13.png" class="gallery-image" data-flex-basis="490px" data-flex-grow="204" height="856" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0ccc44a9fb9.png" width="1748"&gt;&lt;/p&gt;&#10;&lt;h3 id="2-软件安装简单"&gt;&lt;a href="#2-%e8%bd%af%e4%bb%b6%e5%ae%89%e8%a3%85%e7%ae%80%e5%8d%95" class="header-anchor"&gt;&lt;/a&gt;2. 软件安装简单&#10;&lt;/h3&gt;&lt;p&gt;基本都是无脑安装，之前在开发测试环境搭建Redis和MySQL就是通过宝塔快速安装的，5分钟内搭建完毕快速测试，而且卸载的比较干净，特别是如果小白自己下载MySQL编译包安装很容易出现卸载残留导致无法安装新的MySQL&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode14.png" class="gallery-image" data-flex-basis="615px" data-flex-grow="256" height="731" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0ccc44b2aa0.png" width="1875"&gt;&lt;/p&gt;&#10;&lt;h3 id="3-快捷的防火墙管理"&gt;&lt;a href="#3-%e5%bf%ab%e6%8d%b7%e7%9a%84%e9%98%b2%e7%81%ab%e5%a2%99%e7%ae%a1%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;3. 快捷的防火墙管理&#10;&lt;/h3&gt;&lt;p&gt;宝塔提供的防火墙管理基本满足需求，比使用防火墙命令逐个放行便捷&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode15.png" class="gallery-image" data-flex-basis="490px" data-flex-grow="204" height="645" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0ccdc2585ae.png" width="1319"&gt;&lt;/p&gt;&#10;&lt;h3 id="总结"&gt;&lt;a href="#%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;总结&#10;&lt;/h3&gt;&lt;p&gt;总的来说宝塔适合建站管理，快速应用部署，但对于复杂的操作还是需要自行通过终端解决，而且防火墙功能有限，抗CC攻击等都需要付费或者搭建其他软件&lt;/p&gt;&#10;&lt;h2 id="appnode"&gt;&lt;a href="#appnode" class="header-anchor"&gt;&lt;/a&gt;APPNODE&#10;&lt;/h2&gt;&lt;p&gt;在最近看到APPNODE这个管理面板，在虚拟机跑了一下发现其功能强大，还是有点意思的。&lt;/p&gt;&#10;&lt;p&gt;以下逐一说明（无广告费）&lt;/p&gt;&#10;&lt;h3 id="1-简单安装"&gt;&lt;a href="#1-%e7%ae%80%e5%8d%95%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;1. 简单安装&#10;&lt;/h3&gt;&lt;p&gt;其实APPNODE和宝塔都是一键安装，自选服务器环境这些共同点，从这点上来说没什么差别，两者甚至连默认端口号都是一样的。。&lt;img alt="appnode.png" class="gallery-image" data-flex-basis="372px" data-flex-grow="155" height="623" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fc74ae2.png" width="966"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode1.png" class="gallery-image" data-flex-basis="309px" data-flex-grow="128" height="769" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fde89d0.png" width="991"&gt;&lt;/p&gt;&#10;&lt;p&gt;装好后的首页，默认展示建站指引（好评，第一次在宝塔建站还是摸索了一会的）&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode2.png" class="gallery-image" data-flex-basis="351px" data-flex-grow="146" height="873" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fded4d6.png" width="1280"&gt;&lt;/p&gt;&#10;&lt;h3 id="更详细的服务器信息"&gt;&lt;a href="#%e6%9b%b4%e8%af%a6%e7%bb%86%e7%9a%84%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bf%a1%e6%81%af" class="header-anchor"&gt;&lt;/a&gt;更详细的服务器信息&#10;&lt;/h3&gt;&lt;p&gt;展示的服务器信息比宝塔详细很多，各项指标都有展示&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode3.png" class="gallery-image" data-flex-basis="330px" data-flex-grow="137" height="922" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fd8f30e.png" width="1268"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode4.png" class="gallery-image" data-flex-basis="711px" data-flex-grow="296" height="352" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fc74af9.png" width="1043"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode5.png" class="gallery-image" data-flex-basis="683px" data-flex-grow="284" height="284" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fc6f3e1.png" width="809"&gt;&lt;/p&gt;&#10;&lt;h3 id="更多的系统软件"&gt;&lt;a href="#%e6%9b%b4%e5%a4%9a%e7%9a%84%e7%b3%bb%e7%bb%9f%e8%bd%af%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;更多的系统软件&#10;&lt;/h3&gt;&lt;p&gt;可以安装许多软件目前都是免费的，软件也和宝塔类型类似，但有一些特别的，比如frp内网穿透之类还是不错的，比自己部署简单不少，不知道以后会不会收费&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode6.png" class="gallery-image" data-flex-basis="628px" data-flex-grow="261" height="637" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fd9862d.png" width="1668"&gt;&lt;/p&gt;&#10;&lt;p&gt;网络测试软件看看就好&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode7.png" class="gallery-image" data-flex-basis="848px" data-flex-grow="353" height="411" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fc700c8.png" width="1453"&gt;&lt;/p&gt;&#10;&lt;h3 id="更丰富的软件市场"&gt;&lt;a href="#%e6%9b%b4%e4%b8%b0%e5%af%8c%e7%9a%84%e8%bd%af%e4%bb%b6%e5%b8%82%e5%9c%ba" class="header-anchor"&gt;&lt;/a&gt;更丰富的软件市场&#10;&lt;/h3&gt;&lt;p&gt;和宝塔类似的软件市场，同样种类更多，有些2017年才兴起的小众软件也在里面，也有不少刚需平台例如owncloud、nextcloud，而同样用宝塔搭建私有云还是挺折腾的&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode8.png" class="gallery-image" data-flex-basis="491px" data-flex-grow="204" height="938" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fd768f6.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;h3 id="功能完备的防火墙管理重点"&gt;&lt;a href="#%e5%8a%9f%e8%83%bd%e5%ae%8c%e5%a4%87%e7%9a%84%e9%98%b2%e7%81%ab%e5%a2%99%e7%ae%a1%e7%90%86%e9%87%8d%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;功能完备的防火墙管理（重点）&#10;&lt;/h3&gt;&lt;p&gt;在我看来这个是与宝塔最大的不同，前面那些只要宝塔想加入其实也不难，但这个支持自己配置的防火墙规则，其实内部实现应该是通过nginx代理配置实现，但比宝塔收费的要良心，通过简单设置参数即可抵抗简单的DDOS攻击&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode9.png" class="gallery-image" data-flex-basis="577px" data-flex-grow="240" height="402" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc7fbc2bba.png" width="968"&gt;&lt;/p&gt;&#10;&lt;p&gt;攻击测试，通过Apache ab压测进行DDOS攻击&lt;/p&gt;&#10;&lt;p&gt;未开启之前所有请求顺利通过&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode10.png" class="gallery-image" data-flex-basis="182px" data-flex-grow="76" height="805" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cd1adb8123.png" width="613"&gt;&lt;/p&gt;&#10;&lt;p&gt;在配置1秒内最大访问次数后成功拦截，1000个请求只有70个有效，说明DDOS流量劫持被成功拦截&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode11.png" class="gallery-image" data-flex-basis="1103px" data-flex-grow="459" height="132" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cc800ef439.png" width="607"&gt;&lt;/p&gt;&#10;&lt;h3 id="更灵活的网站控制"&gt;&lt;a href="#%e6%9b%b4%e7%81%b5%e6%b4%bb%e7%9a%84%e7%bd%91%e7%ab%99%e6%8e%a7%e5%88%b6" class="header-anchor"&gt;&lt;/a&gt;更灵活的网站控制&#10;&lt;/h3&gt;&lt;p&gt;日志、SSL、负载情况、网站更新自动提醒重载nginx等&lt;/p&gt;&#10;&lt;p&gt;另外还提供免费SSL证书自动续租，十分好评&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="appnode12.png" class="gallery-image" data-flex-basis="516px" data-flex-grow="215" height="658" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0cd266efcf0.png" width="1415"&gt;&lt;/p&gt;&#10;&lt;h3 id="总结-1"&gt;&lt;a href="#%e6%80%bb%e7%bb%93-1" class="header-anchor"&gt;&lt;/a&gt;总结&#10;&lt;/h3&gt;&lt;p&gt;APPNODE适合对服务器操作熟悉，需要更大灵活度的定制服务器功能的用户，对于建站灵活度也非常高，而缺点也比较明显，功能多必然带来操作复杂，许多功能小白可能没听过，乱操作一波可能会翻车。。&lt;/p&gt;&#10;</description></item><item><title>极力推荐的网络加速（梯子）服务</title><link>https://blog.fjy8018.top/archives/186/</link><pubDate>Sun, 09 Dec 2018 11:17:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/186/</guid><description>&lt;h2 id="地址"&gt;&lt;a href="#%e5%9c%b0%e5%9d%80" class="header-anchor"&gt;&lt;/a&gt;地址&#10;&lt;/h2&gt;&lt;p&gt;&lt;del&gt;5折圣诞优惠码：&lt;strong&gt;CHRISTMASANDNEWYEAR&lt;/strong&gt; ，账户内现有产品可使用优惠码 &lt;strong&gt;RENEW2019&lt;/strong&gt; 获得 35% off 续约折扣&lt;/del&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://aaex.cloud/aff.php?aff=704" target="_blank" rel="noopener"&#10; &gt;AAEX&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="原因"&gt;&lt;a href="#%e5%8e%9f%e5%9b%a0" class="header-anchor"&gt;&lt;/a&gt;原因&#10;&lt;/h2&gt;&lt;p&gt;从最开始使用免费账号到坚持自建服务器搭建专线梯子，一直认为专线梯子才是王道，何必花钱购买别人的昂贵加速服务，然而。。直到发现AAEX。。其与自建服务器区别如下&lt;/p&gt;&#10;&lt;h3 id="默认套餐"&gt;&lt;a href="#%e9%bb%98%e8%ae%a4%e5%a5%97%e9%a4%90" class="header-anchor"&gt;&lt;/a&gt;默认套餐&#10;&lt;/h3&gt;&lt;p&gt;默认套餐对自建服务器的吸引不大而且和其他服务提供商产品类型差不多，适用于视频搬运。另外，因为自建服务器成本和套餐差距不大，除了需要自己维护之外没太大区别，而且自建服务器还有台服务器可以折腾&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/09/5c0c8412d2b5e.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="aaex7.png" class="gallery-image" data-flex-basis="417px" data-flex-grow="173" height="696" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0c8412d2b5e.png" width="1210"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;对于本人来说一般就偶尔看个视频，自建服务器一个月才3-5刀，还不限流量，但缺点也是节点有限，而且带宽流量极大浪费，然后发现了另一个隐藏套餐&lt;/p&gt;&#10;&lt;h3 id="固定流量包"&gt;&lt;a href="#%e5%9b%ba%e5%ae%9a%e6%b5%81%e9%87%8f%e5%8c%85" class="header-anchor"&gt;&lt;/a&gt;固定流量包&#10;&lt;/h3&gt;&lt;p&gt;这个就比较有意思了，按量付费，和买运营商流量包一样，按需购买，还不清零，永久有效，对于查阅资料，游戏玩家来说还是非常友好的，而且所有节点均可用&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/09/5c0c8412d4b8f.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="aaex6.png" class="gallery-image" data-flex-basis="389px" data-flex-grow="162" height="735" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0c8412d4b8f.png" width="1193"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/09/5c0c8412679ee.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="aaex8.png" class="gallery-image" data-flex-basis="342px" data-flex-grow="142" height="868" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0c8412679ee.png" width="1239"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;本人试了下买了200多G的流量套餐100块，38个节点随便用，全平台支持（好评，特别是苹果用户，下载客户端非常麻烦，而且一般还要付费），AAEX官方提供appleID下载梯子app（满分）&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/09/5c0c8412623bf.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="aaex5.png" class="gallery-image" data-flex-basis="140px" data-flex-grow="58" height="479" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0c8412623bf.png" width="280"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="效果"&gt;&lt;a href="#%e6%95%88%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;效果&#10;&lt;/h2&gt;&lt;p&gt;常见的控制台，多个香港节点，延迟低带宽大&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/09/5c0c8412cfe7a.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="aaex4.png" class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="547" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0c8412cfe7a.png" width="877"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;使用RSS订阅客户端自动更新节点，同时带有流量统计，比原生的SSR体验好了不少&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/09/5c0c8412c9acc.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="aaex2.png" class="gallery-image" data-flex-basis="187px" data-flex-grow="78" height="547" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0c8412c9acc.png" width="427"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;全节点均可用&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/09/5c0c8412d2363.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="aaex3.png" class="gallery-image" data-flex-basis="121px" data-flex-grow="50" height="845" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/09/5c0c8412d2363.png" width="427"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;通过在线视频和网页测试基本秒开，在线4K无压力，带宽也能跑满本地带宽（20M）&lt;/p&gt;&#10;&lt;h2 id="总结"&gt;&lt;a href="#%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;总结&#10;&lt;/h2&gt;&lt;p&gt;一趟测试下来，优点如下&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;无需自己购买和搭建服务器&lt;/li&gt;&#10;&lt;li&gt;无需担心IP被墙&lt;/li&gt;&#10;&lt;li&gt;多节点选择，延迟低（自建服务器香港、日本机房贼贵）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;固定流量包，不清零&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;全平台支持&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;用了这个之后基本就告别自建服务器的梯子了。。&lt;/p&gt;&#10;</description></item><item><title>Mesos集群安装</title><link>https://blog.fjy8018.top/archives/185/</link><pubDate>Wed, 03 Oct 2018 22:10:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/185/</guid><description>&lt;h2 id="基础环境"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;基础环境&#10;&lt;/h2&gt;&lt;p&gt;4台服务器，一台外部客户机&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/10/03/5bb4cd4019de8.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="mesos.png" class="gallery-image" data-flex-basis="469px" data-flex-grow="195" height="741" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/10/03/5bb4cd4019de8.png" width="1450"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="安装指南"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e6%8c%87%e5%8d%97" class="header-anchor"&gt;&lt;/a&gt;安装指南&#10;&lt;/h2&gt;&lt;p&gt;官方支持C++源码编译安装和Docker安装&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://mesos.apache.org/downloads/" target="_blank" rel="noopener"&#10; &gt;C++源码编译安装地址&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://hub.docker.com/u/mesosphere/" target="_blank" rel="noopener"&#10; &gt;Docker镜像仓库&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="停止所有容器命令"&gt;&lt;a href="#%e5%81%9c%e6%ad%a2%e6%89%80%e6%9c%89%e5%ae%b9%e5%99%a8%e5%91%bd%e4%bb%a4" class="header-anchor"&gt;&lt;/a&gt;停止所有容器命令&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker stop &lt;span class="k"&gt;$(&lt;/span&gt;docker ps -a -q&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker rm &lt;span class="k"&gt;$(&lt;/span&gt;docker ps -a -q&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="安装"&gt;&lt;a href="#%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;安装&#10;&lt;/h2&gt;&lt;h3 id="mesos主节点"&gt;&lt;a href="#mesos%e4%b8%bb%e8%8a%82%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;mesos主节点&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;node1&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull mesosphere/mesos-master:1.7.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;node2(host)&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run --name mesos-zookeeper -p 2181:2181 --restart always -d zookeeper:3.5&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;node1执行脚本(需替换zk IP地址)&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;MESOS_QUORUM=1&lt;/code&gt;即1为单机运行，3个节点为2，计算方式为 &lt;code&gt;n÷2+1 \&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;若不手动指定&lt;code&gt;hostname&lt;/code&gt;映射的IP，则所有节点默认通过主机名进行通信&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;使用host通信脚本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d --net&lt;span class="o"&gt;=&lt;/span&gt;host &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_ZK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;zk://192.168.0.32:2181/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_QUORUM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;in_memory &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/tmp/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/log/mesos:/var/log/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/work/mesos:/var/tmp/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 5050:5050 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name&lt;span class="o"&gt;=&lt;/span&gt;mesos-master &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mesosphere/mesos-master:1.7.0 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;使用IP通信脚本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d --net&lt;span class="o"&gt;=&lt;/span&gt;host &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --hostname&lt;span class="o"&gt;=&lt;/span&gt;192.168.0.32 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5050&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_ZK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;zk://192.168.0.32:2181/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_QUORUM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;in_memory &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/tmp/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/log/mesos:/var/log/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/work/mesos:/var/tmp/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 5050:5050 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name&lt;span class="o"&gt;=&lt;/span&gt;mesos-master &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mesosphere/mesos-master:1.7.0 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --no-hostname_lookup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --ip&lt;span class="o"&gt;=&lt;/span&gt;192.168.0.33&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;查看日志&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker logs mesos-master&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;成功输出日志&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.868827 &lt;span class="m"&gt;14&lt;/span&gt; group.cpp:341&lt;span class="o"&gt;]&lt;/span&gt; Group process &lt;span class="o"&gt;(&lt;/span&gt;zookeeper-group&lt;span class="o"&gt;(&lt;/span&gt;2&lt;span class="o"&gt;)&lt;/span&gt;@192.168.0.33:5050&lt;span class="o"&gt;)&lt;/span&gt; connected to ZooKeeper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.868902 &lt;span class="m"&gt;14&lt;/span&gt; group.cpp:831&lt;span class="o"&gt;]&lt;/span&gt; Syncing group operations: queue size &lt;span class="o"&gt;(&lt;/span&gt;joins, cancels, datas&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;0, 0, 0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.868921 &lt;span class="m"&gt;14&lt;/span&gt; group.cpp:419&lt;span class="o"&gt;]&lt;/span&gt; Trying to create path &lt;span class="s1"&gt;&amp;#39;/mesos&amp;#39;&lt;/span&gt; in ZooKeeper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.902194 &lt;span class="m"&gt;14&lt;/span&gt; contender.cpp:268&lt;span class="o"&gt;]&lt;/span&gt; New candidate &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; has entered the contest &lt;span class="k"&gt;for&lt;/span&gt; leadership&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.904409 &lt;span class="m"&gt;8&lt;/span&gt; detector.cpp:152&lt;span class="o"&gt;]&lt;/span&gt; Detected a new leader: &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.904513 &lt;span class="m"&gt;8&lt;/span&gt; group.cpp:700&lt;span class="o"&gt;]&lt;/span&gt; Trying to get &lt;span class="s1"&gt;&amp;#39;/mesos/json.info_0000000001&amp;#39;&lt;/span&gt; in ZooKeeper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.912968 &lt;span class="m"&gt;8&lt;/span&gt; zookeeper.cpp:262&lt;span class="o"&gt;]&lt;/span&gt; A new leading master &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;UPID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;master@192.168.0.33:5050&lt;span class="o"&gt;)&lt;/span&gt; is detected&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.913091 &lt;span class="m"&gt;8&lt;/span&gt; master.cpp:2113&lt;span class="o"&gt;]&lt;/span&gt; Elected as the leading master!&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.913115 &lt;span class="m"&gt;8&lt;/span&gt; master.cpp:1668&lt;span class="o"&gt;]&lt;/span&gt; Recovering from registrar&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.916913 &lt;span class="m"&gt;11&lt;/span&gt; registrar.cpp:383&lt;span class="o"&gt;]&lt;/span&gt; Successfully fetched the registry &lt;span class="o"&gt;(&lt;/span&gt;0B&lt;span class="o"&gt;)&lt;/span&gt; in 3.734016ms&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.917054 &lt;span class="m"&gt;11&lt;/span&gt; registrar.cpp:487&lt;span class="o"&gt;]&lt;/span&gt; Applied &lt;span class="m"&gt;1&lt;/span&gt; operations in 26us&lt;span class="p"&gt;;&lt;/span&gt; attempting to update the registry&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.918582 &lt;span class="m"&gt;11&lt;/span&gt; registrar.cpp:544&lt;span class="o"&gt;]&lt;/span&gt; Successfully updated the registry in 1.449984ms&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.918630 &lt;span class="m"&gt;11&lt;/span&gt; registrar.cpp:416&lt;span class="o"&gt;]&lt;/span&gt; Successfully recovered registrar&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 08:41:29.918772 &lt;span class="m"&gt;8&lt;/span&gt; master.cpp:1782&lt;span class="o"&gt;]&lt;/span&gt; Recovered &lt;span class="m"&gt;0&lt;/span&gt; agents from the registry &lt;span class="o"&gt;(&lt;/span&gt;121B&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; allowing 10mins &lt;span class="k"&gt;for&lt;/span&gt; agents to reregister&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;访问IP:5050，对于PWD，可以访问&lt;code&gt;http://SSHIP-5050.direct.labs.play-with-docker.com/#/&lt;/code&gt;，将SSH ip替换成实际提供的IP即可&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/10/03/5bb4cd40025d2.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="mesos-master1.png" class="gallery-image" data-flex-basis="504px" data-flex-grow="210" height="1218" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/10/03/5bb4cd40025d2.png" width="2560"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="mesos从节点"&gt;&lt;a href="#mesos%e4%bb%8e%e8%8a%82%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;mesos从节点&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;node3 (slave-1)、node4(slave-2)&lt;/p&gt;&#10;&lt;p&gt;启动脚本&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;使用host通信脚本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /cgroup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d --net&lt;span class="o"&gt;=&lt;/span&gt;host --privileged &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5051&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_MASTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;zk://192.168.0.32:2181/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_SWITCH_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_CONTAINERIZERS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker,mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/tmp/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/log/mesos:/var/log/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/tmp/mesos:/var/tmp/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /cgroup:/cgroup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /sys:/sys &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;which docker&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;:/usr/local/bin/docker&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name&lt;span class="o"&gt;=&lt;/span&gt;mesos-slave &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 5051:5051 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mesosphere/mesos-slave:1.7.0 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --no-systemd_enable_support&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;使用IP通信脚本，&lt;code&gt;--ip&lt;/code&gt;需要改成实际IP&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /cgroup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d --net&lt;span class="o"&gt;=&lt;/span&gt;host --privileged &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5051&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_MASTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;zk://192.168.0.32:2181/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_SWITCH_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_CONTAINERIZERS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker,mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_LOG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MESOS_WORK_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/tmp/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/log/mesos:/var/log/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/tmp/mesos:/var/tmp/mesos&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /cgroup:/cgroup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /sys:/sys &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;which docker&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;:/usr/local/bin/docker&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name&lt;span class="o"&gt;=&lt;/span&gt;mesos-slave &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 5051:5051 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mesosphere/mesos-slave:1.7.0 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --no-systemd_enable_support &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --no-hostname_lookup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --ip&lt;span class="o"&gt;=&lt;/span&gt;192.168.0.31&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;查看日志&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker logs mesos-slave&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动成功日志&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.615039 &lt;span class="m"&gt;12&lt;/span&gt; group.cpp:341&lt;span class="o"&gt;]&lt;/span&gt; Group process &lt;span class="o"&gt;(&lt;/span&gt;zookeeper-group&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;@192.168.0.31:5051&lt;span class="o"&gt;)&lt;/span&gt; connected to ZooKeeper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.615104 &lt;span class="m"&gt;12&lt;/span&gt; group.cpp:831&lt;span class="o"&gt;]&lt;/span&gt; Syncing group operations: queue size &lt;span class="o"&gt;(&lt;/span&gt;joins, cancels, datas&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;0, 0, 0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.615121 &lt;span class="m"&gt;12&lt;/span&gt; group.cpp:419&lt;span class="o"&gt;]&lt;/span&gt; Trying to create path &lt;span class="s1"&gt;&amp;#39;/mesos&amp;#39;&lt;/span&gt; in ZooKeeper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.618291 &lt;span class="m"&gt;13&lt;/span&gt; state.cpp:66&lt;span class="o"&gt;]&lt;/span&gt; Recovering state from &lt;span class="s1"&gt;&amp;#39;/var/tmp/mesos/meta&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.618405 &lt;span class="m"&gt;15&lt;/span&gt; slave.cpp:6930&lt;span class="o"&gt;]&lt;/span&gt; Finished recovering checkpointed state from &lt;span class="s1"&gt;&amp;#39;/var/tmp/mesos/meta&amp;#39;&lt;/span&gt;, beginning agent recovery&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.618475 &lt;span class="m"&gt;8&lt;/span&gt; task_status_update_manager.cpp:207&lt;span class="o"&gt;]&lt;/span&gt; Recovering task status update manager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.618628 &lt;span class="m"&gt;8&lt;/span&gt; docker.cpp:908&lt;span class="o"&gt;]&lt;/span&gt; Recovering Docker containers&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.626359 &lt;span class="m"&gt;13&lt;/span&gt; detector.cpp:152&lt;span class="o"&gt;]&lt;/span&gt; Detected a new leader: &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.626487 &lt;span class="m"&gt;15&lt;/span&gt; group.cpp:700&lt;span class="o"&gt;]&lt;/span&gt; Trying to get &lt;span class="s1"&gt;&amp;#39;/mesos/json.info_0000000003&amp;#39;&lt;/span&gt; in ZooKeeper&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.628664 &lt;span class="m"&gt;15&lt;/span&gt; zookeeper.cpp:262&lt;span class="o"&gt;]&lt;/span&gt; A new leading master &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;UPID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;master@192.168.0.33:5050&lt;span class="o"&gt;)&lt;/span&gt; is detected&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.997036 &lt;span class="m"&gt;15&lt;/span&gt; docker.cpp:921&lt;span class="o"&gt;]&lt;/span&gt; Got the list of Docker containers&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.997324 &lt;span class="m"&gt;15&lt;/span&gt; docker.cpp:1157&lt;span class="o"&gt;]&lt;/span&gt; Finished processing orphaned Docker containers&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.997436 &lt;span class="m"&gt;8&lt;/span&gt; slave.cpp:7159&lt;span class="o"&gt;]&lt;/span&gt; Recovering executors&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.997553 &lt;span class="m"&gt;8&lt;/span&gt; slave.cpp:7312&lt;span class="o"&gt;]&lt;/span&gt; Finished recovery&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.998044 &lt;span class="m"&gt;11&lt;/span&gt; task_status_update_manager.cpp:181&lt;span class="o"&gt;]&lt;/span&gt; Pausing sending task status updates&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.998045 &lt;span class="m"&gt;8&lt;/span&gt; slave.cpp:1275&lt;span class="o"&gt;]&lt;/span&gt; New master detected at master@192.168.0.33:5050&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.998159 &lt;span class="m"&gt;8&lt;/span&gt; slave.cpp:1329&lt;span class="o"&gt;]&lt;/span&gt; No credentials provided. Attempting to register without authentication&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:08.998181 &lt;span class="m"&gt;8&lt;/span&gt; slave.cpp:1340&lt;span class="o"&gt;]&lt;/span&gt; Detecting new master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:09.446756 &lt;span class="m"&gt;11&lt;/span&gt; slave.cpp:1500&lt;span class="o"&gt;]&lt;/span&gt; Registered with master master@192.168.0.33:5050&lt;span class="p"&gt;;&lt;/span&gt; given agent ID b597695d-6e37-418a-9879-4ffe46117e17-S0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1003 09:05:09.449091 &lt;span class="m"&gt;10&lt;/span&gt; task_status_update_manager.cpp:188&lt;span class="o"&gt;]&lt;/span&gt; Resuming sending task status updates&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;访问主节点web界面可看见资源邀约有效&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/10/03/5bb4cd4005732.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="mesos-master2.png" class="gallery-image" data-flex-basis="486px" data-flex-grow="202" height="1264" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/10/03/5bb4cd4005732.png" width="2560"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;节点情况&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/10/03/5bb4cd3fdf9aa.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="mesos-master3.png" class="gallery-image" data-flex-basis="1476px" data-flex-grow="615" height="383" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/10/03/5bb4cd3fdf9aa.png" width="2357"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="marathon安装"&gt;&lt;a href="#marathon%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;marathon安装&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;node5&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;启动脚本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d --net&lt;span class="o"&gt;=&lt;/span&gt;host &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 8080:8080 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mesosphere/marathon:latest &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --master zk://192.168.0.32:2181/mesos &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --zk zk://192.168.0.32:2181/marathon&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过IP:8080查看运行结果&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/10/03/5bb4cd3fe60d2.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="marathon1.png" class="gallery-image" data-flex-basis="486px" data-flex-grow="202" height="1264" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/10/03/5bb4cd3fe60d2.png" width="2560"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="marathon-lb安装"&gt;&lt;a href="#marathon-lb%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;marathon-lb安装&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;node6&lt;/p&gt;&#10;&lt;p&gt;启动脚本&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d -e &lt;span class="nv"&gt;PORTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9090&lt;/span&gt; --net&lt;span class="o"&gt;=&lt;/span&gt;host &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 9090:9090 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mesosphere/marathon-lb sse &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --group external &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --marathon http://192.168.0.29:8080&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;访问&lt;code&gt;IP:9090/haproxy?stats&lt;/code&gt;可查看启动状态&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/10/03/5bb4cd4000f2b.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="marathon-lb1.png" class="gallery-image" data-flex-basis="938px" data-flex-grow="390" height="655" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/10/03/5bb4cd4000f2b.png" width="2560"&gt;&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>OpenVZ安装BBR加速</title><link>https://blog.fjy8018.top/archives/183/</link><pubDate>Sat, 15 Sep 2018 22:45:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/183/</guid><description>&lt;h2 id="服务器信息"&gt;&lt;a href="#%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bf%a1%e6%81%af" class="header-anchor"&gt;&lt;/a&gt;服务器信息&#10;&lt;/h2&gt;&lt;h3 id="服务商"&gt;&lt;a href="#%e6%9c%8d%e5%8a%a1%e5%95%86" class="header-anchor"&gt;&lt;/a&gt;服务商&#10;&lt;/h3&gt;&lt;p&gt;VPS为hiformance廉价VPS，OpenVZ虚拟化方式，可以通过&lt;code&gt;virt-what&lt;/code&gt;命令查询，CentOS安装命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install -y virt-what&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查询虚拟化方式&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@iYdQ3O-server ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# virt-what&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openvz&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="硬件信息"&gt;&lt;a href="#%e7%a1%ac%e4%bb%b6%e4%bf%a1%e6%81%af" class="header-anchor"&gt;&lt;/a&gt;硬件信息&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;内存：8G（连续买3年）&lt;/li&gt;&#10;&lt;li&gt;CPU：2核&lt;/li&gt;&#10;&lt;li&gt;硬盘：20G SSD&lt;/li&gt;&#10;&lt;li&gt;流量：4T/月&lt;/li&gt;&#10;&lt;li&gt;带宽：1Gbps&lt;/li&gt;&#10;&lt;li&gt;IPv4：1个&lt;/li&gt;&#10;&lt;li&gt;优惠价：8.99美元/年（QN网络）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;另外补充一点，hiformance运营商比较迷的是，如果购买的是CN2网络，即亚洲优化网络，则有两个虚拟化同时并存的情况&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@BYr3tC-server ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# virt-what&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openvz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lxc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;而两种虚拟化并存就导致其既不能装OpenVZ平台的BBR加速方式，又因为不是KVM虚拟化，没有系统内核，无法通过升级内核的方式安装KVM平台的BBR加速，所以目前建议购买hiformance的还是买QN网络比较好&lt;/p&gt;&#10;&lt;h2 id="加速方式"&gt;&lt;a href="#%e5%8a%a0%e9%80%9f%e6%96%b9%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;加速方式&#10;&lt;/h2&gt;&lt;p&gt;目前（2018-09-15）OpenVZ平台上有5种可选方案&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.cokemine.com/openvzbbr.html" target="_blank" rel="noopener"&#10; &gt;参考链接&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="方案简单分析"&gt;&lt;a href="#%e6%96%b9%e6%a1%88%e7%ae%80%e5%8d%95%e5%88%86%e6%9e%90" class="header-anchor"&gt;&lt;/a&gt;方案简单分析&#10;&lt;/h3&gt;&lt;p&gt;本人并没有尝试全部方案，从方案实现上大致分析下&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;UML&lt;/p&gt;&#10;&lt;p&gt;其&lt;code&gt;Alpine linux&lt;/code&gt; 小内存版对低内存机器较为友好，但UML是装完 ssr 和 bbr 就已经运行了，不确定SSR账号的安全性，以及安装的SSR不清楚是否是原版，故有安全隐患&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;LKL&lt;/p&gt;&#10;&lt;p&gt;LKL是比较多人使用的解决方案，但亲自尝试了几次，发现并不容易安装成功，而且安装失败没有友好的报错提示&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Rinetd&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;Rinetd&lt;/code&gt;原版通过全配置文件配置，使用&lt;code&gt;Rinetd&lt;/code&gt;可以不用开启服务器的&lt;code&gt;TUN/TAP&lt;/code&gt;功能，更为友好，但不支持端口号段配置&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;NanQinLang&lt;/p&gt;&#10;&lt;p&gt;NanQinLang有两个分支，一个是基于&lt;code&gt;Rinetd&lt;/code&gt;修改版，一个是基于&lt;code&gt;haproxy&lt;/code&gt;修改版，本次采用其&lt;code&gt;Rinetd&lt;/code&gt;修改版，由于&lt;code&gt;haproxy&lt;/code&gt;修改版虽然支持端口号段，并且加速也没问题，但存在&lt;code&gt;haproxy&lt;/code&gt;经常挂掉的问题，而根据其作者在&lt;code&gt;GitHub&lt;/code&gt;上的回复，换用 &lt;code&gt;rinetd&lt;/code&gt; 没有这些毛病&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="bbr安装"&gt;&lt;a href="#bbr%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;BBR安装&#10;&lt;/h2&gt;&lt;p&gt;本次采用方案为NanQinLang基于&lt;code&gt;Rinetd&lt;/code&gt;修改版，&lt;a class="link" href="https://github.com/tcp-nanqinlang/wiki/wiki/lkl-rinetd" target="_blank" rel="noopener"&#10; &gt;官方开源地址&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="系统环境"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;系统环境&#10;&lt;/h3&gt;&lt;p&gt;系统版本为最新版&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@BYr3tC-server ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# cat /etc/redhat-release&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CentOS Linux release 7.5.1804 &lt;span class="o"&gt;(&lt;/span&gt;Core&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="安装"&gt;&lt;a href="#%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;安装&#10;&lt;/h3&gt;&lt;p&gt;傻瓜式命令安装，中文引导&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/tcp-nanqinlang/lkl-rinetd/releases/download/1.1.0/tcp_nanqinlang-rinetd-centos.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash tcp_nanqinlang-rinetd-centos.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装好后可以通过配置文件增加端口，配置文件在目录&lt;code&gt;/home/tcp_nanqinlang&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@iYdQ3O-server ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# cd /home/tcp_nanqinlang&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@iYdQ3O-server tcp_nanqinlang&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# ls&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;config-port.conf config-rinetd.sh nohup.out rinetd rinetd.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@iYdQ3O-server tcp_nanqinlang&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# vi config-port.conf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;端口配置文件&lt;code&gt;config-port.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;0.0.0.0 8001 0.0.0.0 8001&#10;0.0.0.0 8888 0.0.0.0 8888&#10;0.0.0.0 8080 0.0.0.0 8080&#10;0.0.0.0 8085 0.0.0.0 8085&#10;0.0.0.0 8086 0.0.0.0 8086&#10;0.0.0.0 8087 0.0.0.0 8087&#10;0.0.0.0 8088 0.0.0.0 8088&#10;0.0.0.0 8089 0.0.0.0 8089&#10;0.0.0.0 9000 0.0.0.0 9000&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="速度测试"&gt;&lt;a href="#%e9%80%9f%e5%ba%a6%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;速度测试&#10;&lt;/h3&gt;&lt;p&gt;使用&lt;code&gt;superbench&lt;/code&gt;进行网速测试&lt;/p&gt;&#10;&lt;h4 id="使用前"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8%e5%89%8d" class="header-anchor"&gt;&lt;/a&gt;使用前&#10;&lt;/h4&gt;&lt;p&gt;如下可见，启用前国内的速度平均在4Mbps左右，十足的小水管，而国外基本有百兆以上的性能&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/09/13/5b99ebdd050a0.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="vps4.png" class="gallery-image" data-flex-basis="199px" data-flex-grow="83" height="809" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/09/13/5b99ebdd050a0.png" width="672"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h4 id="使用后"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8%e5%90%8e" class="header-anchor"&gt;&lt;/a&gt;使用后&#10;&lt;/h4&gt;&lt;p&gt;加速后提升明显，国内速度平均45Mbps，对于大多数家庭20M宽带来说已经稳定跑满&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/09/15/5b9d19a58a1b5.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="vps9.png" class="gallery-image" data-flex-basis="186px" data-flex-grow="77" height="648" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/09/15/5b9d19a58a1b5.png" width="503"&gt;&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>VPS性能测试</title><link>https://blog.fjy8018.top/archives/182/</link><pubDate>Thu, 13 Sep 2018 13:00:22 +0800</pubDate><guid>https://blog.fjy8018.top/archives/182/</guid><description>&lt;h2 id="测试命令"&gt;&lt;a href="#%e6%b5%8b%e8%af%95%e5%91%bd%e4%bb%a4" class="header-anchor"&gt;&lt;/a&gt;测试命令&#10;&lt;/h2&gt;&lt;p&gt;采用superbench&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh &lt;span class="p"&gt;|&lt;/span&gt; bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="openvz"&gt;&lt;a href="#openvz" class="header-anchor"&gt;&lt;/a&gt;OpenVZ&#10;&lt;/h2&gt;&lt;p&gt;以手上的HiFormance VPS为例，superbench自动识别虚拟化平台和硬件信息，并对国内不同地点、不同运营商的上行、下行速度测试和延迟测试&lt;/p&gt;&#10;&lt;p&gt;HiFormance 亚洲优化线路，由于HiFormance 亚洲优化线路虚拟化平台是OpenVZ+lxc，故无法安装BBR加速&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/09/13/5b99ea259b4f6.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="vps6.png" class="gallery-image" data-flex-basis="232px" data-flex-grow="97" height="809" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/09/13/5b99ea259b4f6.png" width="785"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;HiFormance 普通线路，启用了BBR加速&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/09/13/5b99ebdd050a0.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="vps4.png" class="gallery-image" data-flex-basis="199px" data-flex-grow="83" height="809" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/09/13/5b99ebdd050a0.png" width="672"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="kvm"&gt;&lt;a href="#kvm" class="header-anchor"&gt;&lt;/a&gt;KVM&#10;&lt;/h2&gt;&lt;p&gt;以搬瓦工VPS为例，平台识别正常&lt;/p&gt;&#10;&lt;p&gt;搬瓦工VPS，亚洲优化，启用BBR&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/09/13/5b99eccc9c3e7.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="vps3.png" class="gallery-image" data-flex-basis="197px" data-flex-grow="82" height="809" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/09/13/5b99eccc9c3e7.png" width="667"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;阿里云ECS 1Mbps带宽，识别正常&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/09/13/5b99eda58e8b5.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="vps2.png" class="gallery-image" data-flex-basis="199px" data-flex-grow="83" height="809" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/09/13/5b99eda58e8b5.png" width="672"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="物理机"&gt;&lt;a href="#%e7%89%a9%e7%90%86%e6%9c%ba" class="header-anchor"&gt;&lt;/a&gt;物理机&#10;&lt;/h2&gt;&lt;p&gt;识别平台为独立主机&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/09/13/5b99dcd864753.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="vps1.png" class="gallery-image" data-flex-basis="202px" data-flex-grow="84" height="809" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/09/13/5b99dcd864753.png" width="682"&gt;&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>gitlab-ce安装配置</title><link>https://blog.fjy8018.top/archives/176/</link><pubDate>Sun, 19 Aug 2018 16:39:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/176/</guid><description>&lt;h2 id="系统预配置"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e9%a2%84%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;系统预配置&#10;&lt;/h2&gt;&lt;p&gt;关闭防火墙&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# systemctl stop firewalld&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;关闭防火墙开机启动&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# systemctl disable firewalld&#10;Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.&#10;Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;关闭强制访问控制安全策略&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;vi /etc/sysconfig/selinux&#10;&#10;# This file controls the state of SELinux on the system.&#10;# SELINUX= can take one of these three values:&#10;# enforcing - SELinux security policy is enforced.&#10;# permissive - SELinux prints warnings instead of enforcing.&#10;# disabled - No SELinux policy is loaded. SELINUX=enforcing&#10;# SELINUXTYPE= can take one of three two values:&#10;# targeted - Targeted processes are protected,&#10;# minimum - Modification of targeted policy. Only selected processes are protected.&#10;# mls - Multi Level Security protection. SELINUXTYPE=targeted&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;code&gt;SELINUX=enforcing&lt;/code&gt;改成&lt;code&gt;SELINUX=disabled&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;reboot使禁用操作生效&lt;/p&gt;&#10;&lt;p&gt;查看操作是否生效&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# getenforce&#10;Disabled&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="安装gitlab依赖"&gt;&lt;a href="#%e5%ae%89%e8%a3%85gitlab%e4%be%9d%e8%b5%96" class="header-anchor"&gt;&lt;/a&gt;安装Gitlab依赖&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;yum install curl policycoreutils openssh-server openssh-clients postfixs&#10;&#10;[root@localhost ~]# yum install curl policycoreutils openssh-server openssh-clients postfixs&#10;已加载插件：fastestmirror&#10;Determining fastest mirrors&#10; * base: mirrors.aliyun.com&#10; * extras: mirrors.aliyun.com&#10; * updates: mirrors.aliyun.com&#10;base | 3.6 kB 00:00:00&#10;extras | 3.4 kB 00:00:00&#10;updates | 3.4 kB 00:00:00&#10;(1/4): base/7/x86_64/group_gz | 166 kB 00:00:00&#10;(2/4): extras/7/x86_64/primary_db | 174 kB 00:00:00&#10;(3/4): base/7/x86_64/primary_db | 5.9 MB 00:00:01&#10;(4/4): updates/7/x86_64/primary_db | 5.0 MB 00:00:02&#10;软件包 curl-7.29.0-46.el7.x86_64 已安装并且是最新版本&#10;软件包 policycoreutils-2.5-22.el7.x86_64 已安装并且是最新版本&#10;软件包 openssh-server-7.4p1-16.el7.x86_64 已安装并且是最新版本&#10;软件包 openssh-clients-7.4p1-16.el7.x86_64 已安装并且是最新版本&#10;没有可用软件包 postfixs。&#10;无须任何处理&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;下载gitlab仓库源&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792caa9524e.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="gitlab-ce1.png" class="gallery-image" data-flex-basis="478px" data-flex-grow="199" height="467" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792caa9524e.png" width="931"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="启动邮件服务"&gt;&lt;a href="#%e5%90%af%e5%8a%a8%e9%82%ae%e4%bb%b6%e6%9c%8d%e5%8a%a1" class="header-anchor"&gt;&lt;/a&gt;启动邮件服务&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# systemctl start postfix&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;配置开机启动&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# systemctl enable postfix&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="安装gitlab"&gt;&lt;a href="#%e5%ae%89%e8%a3%85gitlab" class="header-anchor"&gt;&lt;/a&gt;安装gitlab&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;yum -y install gitlab-ce&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792caa92435.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="gitlab-ce2.png" class="gallery-image" data-flex-basis="476px" data-flex-grow="198" height="465" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792caa92435.png" width="924"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="配置ssl证书"&gt;&lt;a href="#%e9%85%8d%e7%bd%aessl%e8%af%81%e4%b9%a6" class="header-anchor"&gt;&lt;/a&gt;配置SSL证书&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;mkdir -p /etc/gitlab/ssl&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="创建本地私有秘钥"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e6%9c%ac%e5%9c%b0%e7%a7%81%e6%9c%89%e7%a7%98%e9%92%a5" class="header-anchor"&gt;&lt;/a&gt;创建本地私有秘钥&#10;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# openssl genrsa -out &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.key&amp;quot; 2048&#10;Generating RSA private key, 2048 bit long modulus&#10;..................................................+++&#10;......................+++&#10;e is 65537 (0x10001)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="创建csr证书"&gt;&lt;a href="#%e5%88%9b%e5%bb%bacsr%e8%af%81%e4%b9%a6" class="header-anchor"&gt;&lt;/a&gt;创建CSR证书&#10;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# openssl req -new -key &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.key&amp;quot; -out &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.csr&amp;quot;&#10;You are about to be asked to enter information that will be incorporated&#10;into your certificate request.&#10;What you are about to enter is what is called a Distinguished Name or a DN.&#10;There are quite a few fields but you can leave some blank&#10;For some fields there will be a default value,&#10;If you enter '.', the field will be left blank.&#10;-----&#10;Country Name (2 letter code) [XX]:cn&#10;State or Province Name (full name) []:gd&#10;Locality Name (eg, city) [Default City]:gz&#10;Organization Name (eg, company) [Default Company Ltd]:&#10;Organizational Unit Name (eg, section) []:&#10;Common Name (eg, your name or your server's hostname) []:gitlab.fjy8018.top&#10;Email Address []:admin@example.com&#10;&#10;Please enter the following 'extra' attributes&#10;to be sent with your certificate request&#10;A challenge password []:12345678&#10;An optional company name []:&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;查看证书是否成功创建&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# cd /etc/gitlab/ssl&#10;[root@localhost ssl]# ll&#10;总用量 8&#10;-rw-r--r-- 1 root root 1070 8月 18 11:11 gitlab.fjy8018.top.csr&#10;-rw-r--r-- 1 root root 1675 8月 18 11:08 gitlab.fjy8018.top.key&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="创建签署证书"&gt;&lt;a href="#%e5%88%9b%e5%bb%ba%e7%ad%be%e7%bd%b2%e8%af%81%e4%b9%a6" class="header-anchor"&gt;&lt;/a&gt;创建签署证书&#10;&lt;/h3&gt;&lt;p&gt;利用秘钥和csr证书创建签署证书&#10;X.509为证书格式 365为有效期&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ssl]# openssl x509 -req -days 365 -in &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.csr&amp;quot; -signkey &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.key&amp;quot; -out &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.crt&amp;quot;&#10;Signature ok&#10;subject=/C=cn/ST=gd/L=gz/O= /OU= /CN=gitlab.fjy8018.top/emailAddress=admin@example.com&#10;Getting Private key&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;查看证书目录&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ssl]# ll&#10;总用量 12&#10;-rw-r--r-- 1 root root 1265 8月 18 11:14 gitlab.fjy8018.top.crt&#10;-rw-r--r-- 1 root root 1070 8月 18 11:11 gitlab.fjy8018.top.csr&#10;-rw-r--r-- 1 root root 1675 8月 18 11:08 gitlab.fjy8018.top.key&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="输出pem证书"&gt;&lt;a href="#%e8%be%93%e5%87%bapem%e8%af%81%e4%b9%a6" class="header-anchor"&gt;&lt;/a&gt;输出pem证书&#10;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792caa910ba.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="gitlab-ce3.png" class="gallery-image" data-flex-basis="1526px" data-flex-grow="635" height="145" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792caa910ba.png" width="922"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ssl]# ll&#10;总用量 16&#10;-rw-r--r-- 1 root root 424 8月 18 11:17 dhparams.pem&#10;-rw-r--r-- 1 root root 1265 8月 18 11:14 gitlab.fjy8018.top.crt&#10;-rw-r--r-- 1 root root 1070 8月 18 11:11 gitlab.fjy8018.top.csr&#10;-rw-r--r-- 1 root root 1675 8月 18 11:08 gitlab.fjy8018.top.key&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;证书创建完成&#10;修改证书权限&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ssl]# chmod 700 *&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;查看权限&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ssl]# ll&#10;总用量 16&#10;-rw------- 1 root root 424 8月 18 11:17 dhparams.pem&#10;-rw------- 1 root root 1265 8月 18 11:14 gitlab.fjy8018.top.crt&#10;-rw------- 1 root root 1070 8月 18 11:11 gitlab.fjy8018.top.csr&#10;-rw------- 1 root root 1675 8月 18 11:08 gitlab.fjy8018.top.key&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="配置gitlab证书文件"&gt;&lt;a href="#%e9%85%8d%e7%bd%aegitlab%e8%af%81%e4%b9%a6%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;配置gitlab证书文件&#10;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;vi /etc/gitlab/gitlab.rb&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;修改external_url为https的域名&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;external_url 'https://gitlab.fjy8018.top'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;检索重定向配置，启用重定向&#10;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792caa93b9a.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="gitlab-ce4.png" class="gallery-image" data-flex-basis="442px" data-flex-grow="184" height="467" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792caa93b9a.png" width="861"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;# nginx['client_max_body_size'] = '250m'&#10; nginx['redirect_http_to_https'] = true&#10;# nginx['redirect_http_to_https_port'] = 80&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;修改下方crt配置&#10;原始为&lt;code&gt;# nginx['ssl_certificate'] = &amp;quot;/etc/gitlab/ssl/#{node['fqdn']}.crt&amp;quot;&lt;/code&gt;&#10;修改为&lt;code&gt;nginx['ssl_certificate'] = &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.crt&amp;quot;&lt;/code&gt;&#10;key、ssl_dhparam同样配置&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;nginx['ssl_certificate_key'] = &amp;quot;/etc/gitlab/ssl/gitlab.fjy8018.top.key&amp;quot;&#10;nginx['ssl_dhparam'] = &amp;quot;/etc/gitlab/ssl/dhparams.pem&amp;quot; # Path to dhparams.pem, eg. /etc/gitlab/ssl/dhparams.pem&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;初始化配置文件&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;gitlab-ctl reconfigure&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792caa8fc5b.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="gitlab-ce5.png" class="gallery-image" data-flex-basis="324px" data-flex-grow="135" height="466" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792caa8fc5b.png" width="630"&gt;&lt;/a&gt;&#10;修改gitlab的nginx配置文件&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;vi /var/opt/gitlab/nginx/conf/gitlab-http.conf&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;搜索server_name&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt; server_name gitlab.fjy8018.top;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;并在下方添加重定向HTTP请求&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt; rewrite ^(.*)$ https://$hosst1 permanent;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;使nginx配置生效&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ssl]# gitlab-ctl restart&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;所有服务启动成功&#10;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792caa8d145.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="gitlab-ce6.png" class="gallery-image" data-flex-basis="336px" data-flex-grow="140" height="246" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792caa8d145.png" width="345"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;访问成功&#10;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792caa8e574.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="gitlab-ce7.png" class="gallery-image" data-flex-basis="612px" data-flex-grow="255" height="522" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792caa8e574.png" width="1332"&gt;&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Ansible安装配置</title><link>https://blog.fjy8018.top/archives/175/</link><pubDate>Sun, 19 Aug 2018 16:38:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/175/</guid><description>&lt;p&gt;&lt;a class="link" href="https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html" target="_blank" rel="noopener"&#10; &gt;ansible官方文档指南&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="系统预配置"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e9%a2%84%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;系统预配置&#10;&lt;/h2&gt;&lt;p&gt;关闭防火墙&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# systemctl stop firewalld&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;关闭防火墙开机启动&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# systemctl disable firewalld&#10;Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.&#10;Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;关闭强制访问控制安全策略&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;vi /etc/sysconfig/selinux&#10;&#10;# This file controls the state of SELinux on the system.&#10;# SELINUX= can take one of these three values:&#10;# enforcing - SELinux security policy is enforced.&#10;# permissive - SELinux prints warnings instead of enforcing.&#10;# disabled - No SELinux policy is loaded.&#10;SELINUX=enforcing&#10;# SELINUXTYPE= can take one of three two values:&#10;# targeted - Targeted processes are protected,&#10;# minimum - Modification of targeted policy. Only selected processes are protected.&#10;# mls - Multi Level Security protection.&#10;SELINUXTYPE=targeted&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;code&gt;SELINUX=enforcing&lt;/code&gt;改成&lt;code&gt;SELINUX=disabled&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;reboot使禁用操作生效&lt;/p&gt;&#10;&lt;p&gt;查看操作是否生效&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# getenforce&#10;Disabled&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="安装python3"&gt;&lt;a href="#%e5%ae%89%e8%a3%85python3" class="header-anchor"&gt;&lt;/a&gt;安装Python3&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c501dafe.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible1.png" class="gallery-image" data-flex-basis="477px" data-flex-grow="198" height="467" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c501dafe.png" width="929"&gt;&lt;/a&gt;&#10;解压编译包&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;tar xf Python-3.7.0.tar.xz&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;查看文件&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# ls&#10;anaconda-ks.cfg Python-3.7.0 Python-3.7.0.tar.xz&#10;[root@localhost ~]# cd Python-3.7.0&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;安装OpenSSL依赖，否则使用pip3.7会报找不到SSL模块错误&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;yum install openssl-devel&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;设定编译参数，/usr/local为安装位置，&amp;ndash;with-ensurepip=install指定安装包管理工具，&amp;ndash;enable-shared配置Python匹配系统参数&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost Python-3.7.0]# ./configure --prefix=/usr/local --with-ensurepip=install --enable-shared LDFLAGS=&amp;quot;-Wl,-rpath /usr/local/lib&amp;quot; --with-ssl&#10;checking build system type... x86_64-pc-linux-gnu&#10;checking host system type... x86_64-pc-linux-gnu&#10;checking for python3.7... no&#10;checking for python3... no&#10;checking for python... python&#10;checking for --enable-universalsdk... no&#10;checking for --with-universal-archs... no&#10;checking MACHDEP... checking for --without-gcc... no&#10;checking for --with-icc... no&#10;checking for gcc... no&#10;checking for cc... no&#10;checking for cl.exe... no&#10;configure: error: in `/root/Python-3.7.0':&#10;configure: error: no acceptable C compiler found in $PATH&#10;See `config.log' for more details&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;报错为找不到C编译器，由于系统为最小化安装，没有自带gcc编译器&#10;安装gcc&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;yum install gcc&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c501d7ef.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible2.png" class="gallery-image" data-flex-basis="441px" data-flex-grow="184" height="466" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c501d7ef.png" width="858"&gt;&lt;/a&gt;&#10;再次编译，编译通过&#10;安装编译文件&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt; make &amp;amp;&amp;amp; make altinstall&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c501ced6.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible3.png" class="gallery-image" data-flex-basis="402px" data-flex-grow="167" height="464" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c501ced6.png" width="779"&gt;&lt;/a&gt;&#10;日志如下&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;Traceback (most recent call last):&#10; File &amp;quot;/root/Python-3.7.0/Lib/runpy.py&amp;quot;, line 193, in _run_module_as_main&#10; &amp;quot;__main__&amp;quot;, mod_spec)&#10; File &amp;quot;/root/Python-3.7.0/Lib/runpy.py&amp;quot;, line 85, in _run_code&#10; exec(code, run_globals)&#10; File &amp;quot;/root/Python-3.7.0/Lib/ensurepip/__main__.py&amp;quot;, line 5, in &amp;lt;module&amp;gt;&#10; sys.exit(ensurepip._main())&#10; File &amp;quot;/root/Python-3.7.0/Lib/ensurepip/__init__.py&amp;quot;, line 204, in _main&#10; default_pip=args.default_pip,&#10; File &amp;quot;/root/Python-3.7.0/Lib/ensurepip/__init__.py&amp;quot;, line 117, in _bootstrap&#10; return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)&#10; File &amp;quot;/root/Python-3.7.0/Lib/ensurepip/__init__.py&amp;quot;, line 27, in _run_pip&#10; import pip._internal&#10;zipimport.ZipImportError: can't decompress data; zlib not available&#10;&#10;make: *** [altinstall] 错误 1&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;编译报错，找不到zlib，同理，安装zlib&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;yum -y install zlib*&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;另外，此时安装的是3.7版本，3.7版本需要一个新的包libffi-devel否则也会编译报错&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;yum install libffi-devel -y&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;安装成功&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c501d0bd.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible4.png" class="gallery-image" data-flex-basis="402px" data-flex-grow="167" height="466" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c501d0bd.png" width="781"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Python3.7对应的包管理工具pip版本也为3.7，查看其路径&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost Python-3.7.0]# which pip3.7&#10;/usr/local/bin/pip3.7&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;设置软链接&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;ln -s /usr/local/bin/pip3.7 /usr/local/bin/pip&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="安装virtualenv"&gt;&lt;a href="#%e5%ae%89%e8%a3%85virtualenv" class="header-anchor"&gt;&lt;/a&gt;安装virtualenv&#10;&lt;/h2&gt;&lt;p&gt;安装virtualenv，用于隔离Python环境&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;pip install virtualenv&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c5019c9d.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible5.png" class="gallery-image" data-flex-basis="1324px" data-flex-grow="552" height="146" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c5019c9d.png" width="806"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;安装git工具及其依赖&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;yum -y install git nss curl&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;创建ansible账户&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;useradd ansible&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;切换用户&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost Python-3.7.0]# su - ansible&#10;[ansible@localhost ~]$&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;在ansible用户下创建virtualenv实例，用于集成ansible2.5&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;virtualenv -p /usr/local/bin/python3.7 .py3-a2.5-env&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c5018bf5.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible6.png" class="gallery-image" data-flex-basis="1398px" data-flex-grow="582" height="104" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c5018bf5.png" width="606"&gt;&lt;/a&gt;&#10;源码安装git-ansible2.5&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;cd /home/ansible/.py3-a2.5-env&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;下载源码&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;git clone https://github.com/ansible/ansible.git&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c5018b6c.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible7.png" class="gallery-image" data-flex-basis="1598px" data-flex-grow="666" height="109" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c5018b6c.png" width="726"&gt;&lt;/a&gt;&#10;加载virtualenv环境&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[ansible@localhost .py3-a2.5-env]$ source /home/ansible/.py3-a2.5-env/bin/activate&#10;(.py3-a2.5-env) [ansible@localhost .py3-a2.5-env]$&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;安装ansible依赖&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;pip install paramiko PyYAML jinja2&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/08/19/5b792c5018808.png" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="ansible8.png" class="gallery-image" data-flex-basis="596px" data-flex-grow="248" height="359" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/19/5b792c5018808.png" width="893"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;查看文件&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;(.py3-a2.5-env) [ansible@localhost .py3-a2.5-env]$ ll&#10;总用量 8&#10;drwxrwxr-x 14 ansible ansible 4096 8月 18 20:24 ansible&#10;drwxrwxr-x 2 ansible ansible 248 8月 18 20:16 bin&#10;drwxrwxr-x 2 ansible ansible 24 8月 18 20:13 include&#10;drwxrwxr-x 3 ansible ansible 23 8月 18 20:13 lib&#10;-rw-rw-r-- 1 ansible ansible 59 8月 18 20:16 pip-selfcheck.json&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;移动源码至虚拟环境&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;mv ansible/ .py3-a2.5-env/&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;进入虚拟环境源码目录&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;(.py3-a2.5-env) [ansible@localhost .py3-a2.5-env]$ cd .py3-a2.5-env/&#10;(.py3-a2.5-env) [ansible@localhost .py3-a2.5-env]$ ll&#10;总用量 108&#10;drwxrwxr-x 2 ansible ansible 223 8月 18 20:24 bin&#10;drwxrwxr-x 3 ansible ansible 63 8月 18 20:24 changelogs&#10;-rw-rw-r-- 1 ansible ansible 10591 8月 18 20:24 CODING_GUIDELINES.md&#10;drwxrwxr-x 4 ansible ansible 53 8月 18 20:24 contrib&#10;-rw-rw-r-- 1 ansible ansible 35148 8月 18 20:24 COPYING&#10;drwxrwxr-x 7 ansible ansible 71 8月 18 20:24 docs&#10;-rw-rw-r-- 1 ansible ansible 48 8月 18 20:24 docsite_requirements.txt&#10;drwxrwxr-x 4 ansible ansible 192 8月 18 20:24 examples&#10;drwxrwxr-x 5 ansible ansible 305 8月 18 20:24 hacking&#10;drwxrwxr-x 3 ansible ansible 21 8月 18 20:24 lib&#10;drwxrwxr-x 2 ansible ansible 78 8月 18 20:24 licenses&#10;-rw-rw-r-- 1 ansible ansible 13452 8月 18 20:24 Makefile&#10;-rw-rw-r-- 1 ansible ansible 557 8月 18 20:24 MANIFEST.in&#10;-rw-rw-r-- 1 ansible ansible 201 8月 18 20:24 MODULE_GUIDELINES.md&#10;drwxrwxr-x 10 ansible ansible 120 8月 18 20:24 packaging&#10;-rw-rw-r-- 1 ansible ansible 5265 8月 18 20:24 README.rst&#10;-rw-rw-r-- 1 ansible ansible 371 8月 18 20:24 requirements.txt&#10;-rw-rw-r-- 1 ansible ansible 10586 8月 18 20:24 setup.py&#10;-rw-rw-r-- 1 ansible ansible 3287 8月 18 20:24 shippable.yml&#10;drwxrwxr-x 10 ansible ansible 121 8月 18 20:24 test&#10;-rw-rw-r-- 1 ansible ansible 1103 8月 18 20:24 tox.ini&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;切换版本&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;(.py3-a2.5-env) [ansible@localhost .py3-a2.5-env]$ git checkout stable-2.5&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;分支 stable-2.5 设置为跟踪来自 origin 的远程分支 stable-2.5。&#10;切换到一个新分支 &amp;lsquo;stable-2.5&amp;rsquo;&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;(.py3-a2.5-env) [ansible@localhost ansible]$ git branch&#10; devel&#10;* stable-2.5&#10;&#10;(.py3-a2.5-env) [ansible@localhost ansible]$ pwd&#10;/home/ansible/.py3-a2.5-env/ansible&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="加载ansible25版本"&gt;&lt;a href="#%e5%8a%a0%e8%bd%bdansible25%e7%89%88%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;加载ansible2.5版本&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;source /home/ansible/.py3-a2.5-env/ansible/hacking/env-setup -q&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;验证版本&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;(.py3-a2.5-env) [ansible@localhost ansible]$ ansible --version&#10;ansible 2.5.8 (stable-2.5 b23b1c2ee0) last updated 2018/08/18 20:35:45 (GMT +800)&#10; config file = None&#10; configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#10; ansible python module location = /home/ansible/.py3-a2.5-env/ansible/lib/ansible&#10; executable location = /home/ansible/.py3-a2.5-env/ansible/bin/ansible&#10; python version = 3.7.0 (default, Aug 18 2018, 20:09:08) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]&#10;&lt;/code&gt;&lt;/pre&gt;&#10;</description></item><item><title>从零开始部署Rancher</title><link>https://blog.fjy8018.top/archives/174/</link><pubDate>Sat, 11 Aug 2018 11:41:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/174/</guid><description>&lt;h2 id="基础环境部署"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83%e9%83%a8%e7%bd%b2" class="header-anchor"&gt;&lt;/a&gt;基础环境部署&#10;&lt;/h2&gt;&lt;p&gt;基础环境使用CentOS 7，版本号为1804，部署在本地虚拟机VM上&lt;/p&gt;&#10;&lt;h3 id="安装centosdocker"&gt;&lt;a href="#%e5%ae%89%e8%a3%85centosdocker" class="header-anchor"&gt;&lt;/a&gt;安装CentOS+docker&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso" target="_blank" rel="noopener"&#10; &gt;CentOS下载地址&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;使用最小安装，ISO镜像大小为906MB，在VM中导入镜像，给4G内存（Rancher2.0最低要求），安装过程系统配置均为默认配置&lt;/p&gt;&#10;&lt;p&gt;安装好后为纯净环境，使用&lt;code&gt;ip addr&lt;/code&gt;即可查看ip，使用外部远程连接工具连接虚拟机ip&#10;&lt;img alt="rancher1.png" class="gallery-image" data-flex-basis="519px" data-flex-grow="216" height="406" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec998439f2.png" width="879"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用&lt;code&gt;yum install docker&lt;/code&gt;安装docker环境&#10;&lt;img alt="rancher2.png" class="gallery-image" data-flex-basis="480px" data-flex-grow="200" height="465" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec9984435d.png" width="931"&gt;&lt;/p&gt;&#10;&lt;p&gt;安装好后使用命令&lt;code&gt;systemctl start docker&lt;/code&gt;启动docker&#10;使用&lt;code&gt; docker info&lt;/code&gt;或者&lt;code&gt;docker version&lt;/code&gt;查看版本&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# docker version&#10;Client:&#10; Version: 1.13.1&#10; API version: 1.26&#10; Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64&#10; Go version: go1.9.4&#10; Git commit: dded712/1.13.1&#10; Built: Tue Jul 17 18:34:48 2018&#10; OS/Arch: linux/amd64&#10;&#10;Server:&#10; Version: 1.13.1&#10; API version: 1.26 (minimum version 1.12)&#10; Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64&#10; Go version: go1.9.4&#10; Git commit: dded712/1.13.1&#10; Built: Tue Jul 17 18:34:48 2018&#10; OS/Arch: linux/amd64&#10; Experimental: false&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="安装rancher"&gt;&lt;a href="#%e5%ae%89%e8%a3%85rancher" class="header-anchor"&gt;&lt;/a&gt;安装Rancher&#10;&lt;/h3&gt;&lt;p&gt;为了加速Rancher下载速度，需要配置docker镜像下载地址，此处提供一个阿里云的镜像地址&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;{&#10; &amp;quot;registry-mirrors&amp;quot;: [&amp;quot;https://fy707np5.mirror.aliyuncs.com&amp;quot;]&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;使用命令编辑docker镜像地址&lt;code&gt; vi /etc/docker/daemon.json&lt;/code&gt;&#10;保存后重载配置&lt;code&gt;systemctl daemon-reload&lt;/code&gt;&#10;重启docker服务&lt;code&gt;systemctl restart docker&lt;/code&gt;&#10;镜像地址配置完成&lt;/p&gt;&#10;&lt;p&gt;访问Rancher官网查看docker命令&#10;&lt;a class="link" href="https://rancher.com/" target="_blank" rel="noopener"&#10; &gt;Rancher英文官网&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.cnrancher.com/" target="_blank" rel="noopener"&#10; &gt;Rancher中文官网&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;访问quickstart查看docker命令&lt;/p&gt;&#10;&lt;p&gt;目前Rancher官方开始推荐2.0版本，首次使用推荐使用1.6稳定版&#10;&lt;img alt="rancher3.png" class="gallery-image" data-flex-basis="545px" data-flex-grow="227" height="681" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec99849aaa.png" width="1547"&gt;&lt;/p&gt;&#10;&lt;p&gt;在下方找到1.6文档，使用命令在虚拟机中安装Rancher1.6&#10;&lt;img alt="rancher4.png" class="gallery-image" data-flex-basis="709px" data-flex-grow="295" height="354" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec998470c0.png" width="1047"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="rancher5.png" class="gallery-image" data-flex-basis="329px" data-flex-grow="137" height="925" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec9984c5c3.png" width="1270"&gt;&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="rancher6.png" class="gallery-image" data-flex-basis="440px" data-flex-grow="183" height="453" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec998464fd.png" width="831"&gt;&lt;/p&gt;&#10;&lt;h3 id="配置防火墙"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e9%98%b2%e7%81%ab%e5%a2%99" class="header-anchor"&gt;&lt;/a&gt;配置防火墙&#10;&lt;/h3&gt;&lt;p&gt;安装后若没有打开8080端口则会报错，配置CentOS防火墙&#10;来源：[莫小安-CentOS7使用firewalld打开关闭防火墙与端口][10]&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;1、firewalld的基本使用&#10;启动： systemctl start firewalld&#10;关闭： systemctl stop firewalld&#10;查看状态： systemctl status firewalld&#10;开机禁用 ： systemctl disable firewalld&#10;开机启用 ： systemctl enable firewalld&#10;&lt;img alt="rancher7.png" class="gallery-image" data-flex-basis="655px" data-flex-grow="272" height="325" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec99845fbf.png" width="887"&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;2.systemctl是CentOS7的服务管理工具中主要的工具，它融合之前service和chkconfig的功能于一体。&#10;启动一个服务：systemctl start firewalld.service&#10;关闭一个服务：systemctl stop firewalld.service&#10;重启一个服务：systemctl restart firewalld.service&#10;显示一个服务的状态：systemctl status firewalld.service&#10;在开机时启用一个服务：systemctl enable firewalld.service&#10;在开机时禁用一个服务：systemctl disable firewalld.service&#10;查看服务是否开机启动：systemctl is-enabled firewalld.service&#10;查看已启动的服务列表：systemctl list-unit-files|grep enabled&#10;查看启动失败的服务列表：systemctl &amp;ndash;failed&lt;/p&gt;&#10;&lt;p&gt;3.配置firewalld-cmd&lt;/p&gt;&#10;&lt;p&gt;查看版本： firewall-cmd &amp;ndash;version&#10;查看帮助： firewall-cmd &amp;ndash;help&#10;显示状态： firewall-cmd &amp;ndash;state&#10;查看所有打开的端口： firewall-cmd &amp;ndash;zone=public &amp;ndash;list-ports&#10;更新防火墙规则： firewall-cmd &amp;ndash;reload&#10;查看区域信息: firewall-cmd &amp;ndash;get-active-zones&#10;查看指定接口所属区域： firewall-cmd &amp;ndash;get-zone-of-interface=eth0&#10;拒绝所有包：firewall-cmd &amp;ndash;panic-on&#10;取消拒绝状态： firewall-cmd &amp;ndash;panic-off&#10;查看是否拒绝： firewall-cmd &amp;ndash;query-panic&lt;/p&gt;&#10;&lt;p&gt;那怎么开启一个端口呢&#10;添加&#10;firewall-cmd &amp;ndash;zone=public &amp;ndash;add-port=80/tcp &amp;ndash;permanent （&amp;ndash;permanent永久生效，没有此参数重启后失效）&#10;重新载入&#10;firewall-cmd &amp;ndash;reload&#10;查看&#10;firewall-cmd &amp;ndash;zone= public &amp;ndash;query-port=80/tcp&#10;删除&#10;firewall-cmd &amp;ndash;zone= public &amp;ndash;remove-port=80/tcp &amp;ndash;permanent&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;通过命令放行8080端口&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;firewall-cmd --zone=public --add-port=8080/tcp --permanent&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="rancher8.png" class="gallery-image" data-flex-basis="4220px" data-flex-grow="1758" height="36" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968aa407.png" width="633"&gt;&lt;/p&gt;&#10;&lt;p&gt;重载防火墙&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;firewall-cmd --reload&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;查看端口放行情况&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt; firewall-cmd --zone=public --list-ports&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="rancher9.png" class="gallery-image" data-flex-basis="1628px" data-flex-grow="678" height="70" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b1579.png" width="475"&gt;&lt;/p&gt;&#10;&lt;h2 id="设置rancher"&gt;&lt;a href="#%e8%ae%be%e7%bd%aerancher" class="header-anchor"&gt;&lt;/a&gt;设置Rancher&#10;&lt;/h2&gt;&lt;h3 id="设置rancher界面语言"&gt;&lt;a href="#%e8%ae%be%e7%bd%aerancher%e7%95%8c%e9%9d%a2%e8%af%ad%e8%a8%80" class="header-anchor"&gt;&lt;/a&gt;设置Rancher界面语言&#10;&lt;/h3&gt;&lt;p&gt;通过虚拟机ip+端口号访问Rancher：&lt;code&gt;http://192.168.79.142:8080&lt;/code&gt;&#10;&lt;img alt="rancher10.png" class="gallery-image" data-flex-basis="690px" data-flex-grow="287" height="404" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b93b4.png" width="1163"&gt;&lt;/p&gt;&#10;&lt;p&gt;默认为英文界面，Rancher官方有中文支持&#10;修改右下方语言选项即可&#10;&lt;img alt="rancher11.png" class="gallery-image" data-flex-basis="580px" data-flex-grow="241" height="756" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968ba0d8.png" width="1828"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="rancher12.png" class="gallery-image" data-flex-basis="624px" data-flex-grow="260" height="486" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b5a50.png" width="1264"&gt;&lt;/p&gt;&#10;&lt;h3 id="设置rancher主机"&gt;&lt;a href="#%e8%ae%be%e7%bd%aerancher%e4%b8%bb%e6%9c%ba" class="header-anchor"&gt;&lt;/a&gt;设置Rancher主机&#10;&lt;/h3&gt;&lt;p&gt;首次访问需要设置主机&#10;&lt;img alt="rancher13.png" class="gallery-image" data-flex-basis="645px" data-flex-grow="268" height="490" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b61be.png" width="1317"&gt;&lt;/p&gt;&#10;&lt;p&gt;按照默认识别的IP即可，点击保存&#10;&lt;img alt="rancher14.png" class="gallery-image" data-flex-basis="473px" data-flex-grow="197" height="582" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b66c3.png" width="1148"&gt;&lt;/p&gt;&#10;&lt;p&gt;选择主机类型，包含自定义主机、亚马逊主机等，此处选择自定义主机&#10;&lt;img alt="rancher15.png" class="gallery-image" data-flex-basis="519px" data-flex-grow="216" height="607" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b99b7.png" width="1313"&gt;&lt;/p&gt;&#10;&lt;p&gt;依照指示操作，为了确保通信测试，暂时关闭防火墙&#10;&lt;img alt="rancher16.png" class="gallery-image" data-flex-basis="693px" data-flex-grow="289" height="320" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b76b2.png" width="925"&gt;&lt;/p&gt;&#10;&lt;p&gt;为了测试多台Rancher Server和agent服务，使用VM保存快照并复制一份虚拟机启动&#10;目前测试：128为server，129为agent，注意此处填的是客户端的地址，非主机地址&#10;&lt;img alt="rancher26.png" class="gallery-image" data-flex-basis="378px" data-flex-grow="157" height="875" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec7c4c89c0.png" width="1380"&gt;&lt;/p&gt;&#10;&lt;h3 id="设置rancher客户端"&gt;&lt;a href="#%e8%ae%be%e7%bd%aerancher%e5%ae%a2%e6%88%b7%e7%ab%af" class="header-anchor"&gt;&lt;/a&gt;设置Rancher客户端&#10;&lt;/h3&gt;&lt;p&gt;复制Server的配置命令，在agent服务器上运行，等待下载&#10;&lt;img alt="rancher19.png" class="gallery-image" data-flex-basis="565px" data-flex-grow="235" height="396" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec7c4c36aa.png" width="933"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="rancher20.png" class="gallery-image" data-flex-basis="500px" data-flex-grow="208" height="447" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec7c4c47a2.png" width="933"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="rancher21.png" class="gallery-image" data-flex-basis="861px" data-flex-grow="358" height="258" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec7c4c1a63.png" width="926"&gt;&lt;/p&gt;&#10;&lt;p&gt;按照指示，运行后关闭Server主机配置&#10;查看主机列表&#10;&lt;img alt="rancher22.png" class="gallery-image" data-flex-basis="626px" data-flex-grow="260" height="289" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec7c4c28e2.png" width="754"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="rancher23.png" class="gallery-image" data-flex-basis="199px" data-flex-grow="82" height="875" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec7c4bd914.png" width="726"&gt;&lt;/p&gt;&#10;&lt;p&gt;也可以添加环境、测试环境、生产环境等&#10;&lt;img alt="rancher24.png" class="gallery-image" data-flex-basis="344px" data-flex-grow="143" height="839" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec7c4bdb11.png" width="1206"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="rancher25.png" class="gallery-image" data-flex-basis="589px" data-flex-grow="245" height="778" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/08/11/5b6ec968b71ce.png" width="1911"&gt;&lt;/p&gt;&#10;</description></item><item><title>GitLab汉化</title><link>https://blog.fjy8018.top/archives/160/</link><pubDate>Tue, 12 Jun 2018 22:30:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/160/</guid><description>&lt;h2 id="准备文件"&gt;&lt;a href="#%e5%87%86%e5%a4%87%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;准备文件&#10;&lt;/h2&gt;&lt;p&gt;目前GitLab汉化由&lt;a class="link" href="https://gitlab.com/xhang/gitlab" target="_blank" rel="noopener"&#10; &gt;xhang&lt;/a&gt;维护，故直接克隆其工程到本地目录即可&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;git clone https://gitlab.com/xhang/gitlab.git&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;当前GitLab最新版为&lt;code&gt;10.8.4&lt;/code&gt;，其他版本自行看&lt;code&gt;release&lt;/code&gt;切换到对应的分支或者下载对应的发布版本即可&#10;下载完毕为文件夹&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1106px" data-flex-grow="460" height="292" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHppe.png" width="1346"&gt;&lt;/p&gt;&#10;&lt;h2 id="修改系统名称别名"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e7%b3%bb%e7%bb%9f%e5%90%8d%e7%a7%b0%e5%88%ab%e5%90%8d" class="header-anchor"&gt;&lt;/a&gt;修改系统名称别名&#10;&lt;/h2&gt;&lt;p&gt;CentOS 7中出于安全考虑，设置了部分别名，防止误操作，但在此会导致复制文件需要反复输入&lt;code&gt;y&lt;/code&gt;，故将其关闭&#10;通过&lt;code&gt;alias&lt;/code&gt;查看当前的别名设置，若有&lt;code&gt;alias cp='cp -i'&lt;/code&gt;，则说明每次复制文件都会出现提示信息&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="793px" data-flex-grow="330" height="213" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xH0Ys.png" width="704"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用&lt;code&gt;vi ~/.bashrc&lt;/code&gt;修改配置文件&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="411px" data-flex-grow="171" height="189" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHbVK.png" width="324"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;使配置文件生效，但还需要重启会话，否则修改的命令可能依旧无效&#10;再次查看，此时别名配置修改成功&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1000px" data-flex-grow="416" height="166" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHQPc.png" width="692"&gt;&lt;/p&gt;&#10;&lt;h2 id="配置汉化"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e6%b1%89%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;配置汉化&#10;&lt;/h2&gt;&lt;p&gt;此处为初次安装汉化，故与补丁方式汉化不同，直接覆盖文件即可&#10;覆盖前备份一下&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;cp -r /opt/gitlab/embedded/service/gitlab-rails{,.ori}&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;覆盖文件&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;cp gitlab/* /opt/gitlab/embedded/service/gitlab-rails/ -rf&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;重启GitLab&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;gitlab-ctl restart&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="593px" data-flex-grow="247" height="296" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHjGN.png" width="732"&gt;&lt;/p&gt;&#10;&lt;h2 id="成功"&gt;&lt;a href="#%e6%88%90%e5%8a%9f" class="header-anchor"&gt;&lt;/a&gt;成功&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;英文&lt;/strong&gt;&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="473px" data-flex-grow="197" height="565" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHK3a.png" width="1115"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;中文&lt;/strong&gt;&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="509px" data-flex-grow="212" height="524" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHEud.png" width="1112"&gt;&lt;/p&gt;&#10;</description></item><item><title>GitLab跨版本升级</title><link>https://blog.fjy8018.top/archives/159/</link><pubDate>Tue, 12 Jun 2018 21:50:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/159/</guid><description>&lt;h2 id="当前版本"&gt;&lt;a href="#%e5%bd%93%e5%89%8d%e7%89%88%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;当前版本&#10;&lt;/h2&gt;&lt;p&gt;当前GitLab版本由宝塔自动安装的8.8.5,但截止至2018-06-12,CentOS的GitLab官方最新版本为10.8.4,显然版本相差较大,故打算跨版本升级至最新版&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="331px" data-flex-grow="138" height="322" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHGfv.png" width="445"&gt;&lt;/p&gt;&#10;&lt;h2 id="步骤"&gt;&lt;a href="#%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;步骤&#10;&lt;/h2&gt;&lt;h3 id="升级指南"&gt;&lt;a href="#%e5%8d%87%e7%ba%a7%e6%8c%87%e5%8d%97" class="header-anchor"&gt;&lt;/a&gt;升级指南&#10;&lt;/h3&gt;&lt;p&gt;GitLab社区版不支持直接跨版本升级，需按照&lt;a class="link" href="https://docs.gitlab.com/ee/policy/maintenance.html#upgrade-recommendations" target="_blank" rel="noopener"&#10; &gt;官方指南&lt;/a&gt;一步步向上升级，若版本越旧，需要跨的版本就越多&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="322px" data-flex-grow="134" height="691" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHcla.png" width="928"&gt;&lt;/p&gt;&#10;&lt;h3 id="下载相关安装包"&gt;&lt;a href="#%e4%b8%8b%e8%bd%bd%e7%9b%b8%e5%85%b3%e5%ae%89%e8%a3%85%e5%8c%85" class="header-anchor"&gt;&lt;/a&gt;下载相关安装包&#10;&lt;/h3&gt;&lt;p&gt;安装包国内选择&lt;a class="link" href="https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/" target="_blank" rel="noopener"&#10; &gt;清华镜像站&lt;/a&gt;速度较快，教育网还有蜜汁加成&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="467px" data-flex-grow="194" height="618" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHuKd.png" width="1203"&gt;&lt;/p&gt;&#10;&lt;p&gt;若升级其他版本也可自行&lt;code&gt;Ctrl+F&lt;/code&gt;&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2150px" data-flex-grow="896" height="133" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHnVJ.png" width="1192"&gt;&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.17.7-ce.0.el7.x86_64.rpm&#10;wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-9.5.8-ce.0.el7.x86_64.rpm&#10;wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.1.4-ce.0.el7.x86_64.rpm&#10;wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="3830px" data-flex-grow="1596" height="53" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xH1LD.png" width="846"&gt;&lt;/p&gt;&#10;&lt;h3 id="升级"&gt;&lt;a href="#%e5%8d%87%e7%ba%a7" class="header-anchor"&gt;&lt;/a&gt;升级&#10;&lt;/h3&gt;&lt;p&gt;关闭GitLab核心服务&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;gitlab-ctl stop unicorn&#10;gitlab-ctl stop sidekiq&#10;gitlab-ctl stop nginx&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1131px" data-flex-grow="471" height="197" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHmvu.png" width="929"&gt;&lt;/p&gt;&#10;&lt;p&gt;安装8.17.7&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;rpm -Uvh gitlab-ce-8.17.7-ce.0.el7.x86_64.rpm&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="481px" data-flex-grow="200" height="401" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHe40.png" width="804"&gt;&lt;/p&gt;&#10;&lt;h3 id="重启服务"&gt;&lt;a href="#%e9%87%8d%e5%90%af%e6%9c%8d%e5%8a%a1" class="header-anchor"&gt;&lt;/a&gt;重启服务&#10;&lt;/h3&gt;&lt;p&gt;若之前从宝塔安装后未配置GitLab的Nginx启动命令则需要自行配置后才能正常启动，操作见文章&lt;a class="link" href="https://blog.fjy8018.top/archives/157/" &gt;GitLab修改配置后nginx无法启动&lt;/a&gt;&#10;重启服务&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[root@localhost ~]# gitlab-ctl restart&#10;/opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/omnibus-ctl-0.3.6/lib/omnibus-ctl.rb:533: warning: Insecure world writable dir /www/server/nvm/versions/node/v8.11.2/bin in PATH, mode 040777&#10;ok: run: gitlab-workhorse: (pid 39809) 1s&#10;ok: run: logrotate: (pid 39821) 0s&#10;ok: run: nginx: (pid 39828) 0s&#10;ok: run: postgresql: (pid 39835) 0s&#10;ok: run: redis: (pid 39844) 0s&#10;ok: run: sidekiq: (pid 39849) 1s&#10;ok: run: unicorn: (pid 39854) 0s&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;重启后稍等片刻即可访问，查看版本号，已经更新为8.17.7，后续步骤同上&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="490px" data-flex-grow="204" height="471" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHlj1.png" width="962"&gt;&lt;/p&gt;&#10;&lt;h3 id="可能的报错"&gt;&lt;a href="#%e5%8f%af%e8%83%bd%e7%9a%84%e6%8a%a5%e9%94%99" class="header-anchor"&gt;&lt;/a&gt;可能的报错&#10;&lt;/h3&gt;&lt;p&gt;部分CentOS版本较低未自带&lt;code&gt;policycoreutils-python&lt;/code&gt;组件可能无法升级至10.x,需要手动&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;yum -y install policycoreutils-python&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="完成"&gt;&lt;a href="#%e5%ae%8c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;完成&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="351px" data-flex-grow="146" height="442" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xH8VW.png" width="647"&gt;&lt;/p&gt;&#10;&lt;p&gt;更新到10.x后明显启动项都变多了&#10;[root@localhost ~]# gitlab-ctl restart&#10;/opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/omnibus-ctl-0.5.0/lib/omnibus-ctl.rb:684: warning: Insecure world writable dir /www/server/nvm/versions/node/v8.11.2/bin in PATH, mode 040777&#10;ok: run: alertmanager: (pid 45330) 1s&#10;ok: run: gitaly: (pid 45336) 0s&#10;ok: run: gitlab-monitor: (pid 45346) 1s&#10;ok: run: gitlab-workhorse: (pid 45362) 0s&#10;ok: run: logrotate: (pid 45369) 1s&#10;ok: run: nginx: (pid 45378) 0s&#10;ok: run: node-exporter: (pid 45383) 0s&#10;ok: run: postgres-exporter: (pid 45387) 1s&#10;ok: run: postgresql: (pid 45394) 0s&#10;ok: run: prometheus: (pid 45476) 1s&#10;ok: run: redis: (pid 45484) 0s&#10;ok: run: redis-exporter: (pid 45488) 1s&#10;ok: run: sidekiq: (pid 45493) 0s&#10;ok: run: unicorn: (pid 45503) 1s&lt;/p&gt;&#10;&lt;p&gt;查看版本号，成功&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="432px" data-flex-grow="180" height="728" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2xHAGw.png" width="1311"&gt;&lt;/p&gt;&#10;</description></item><item><title>GitLab修改配置后nginx无法启动</title><link>https://blog.fjy8018.top/archives/157/</link><pubDate>Mon, 11 Jun 2018 12:30:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/157/</guid><description>&lt;h2 id="起因"&gt;&lt;a href="#%e8%b5%b7%e5%9b%a0" class="header-anchor"&gt;&lt;/a&gt;起因&#10;&lt;/h2&gt;&lt;p&gt;在服务器上通过宝塔搭建了GitLab之后一直没修改GitLab的clone域名和IP配置，今天通过命令自定义域名&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vim /etc/gitlab/gitlab.rb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="456px" data-flex-grow="190" height="508" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2RPEjN.png" width="966"&gt;&lt;/p&gt;&#10;&lt;p&gt;重启配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo gitlab-ctl reconfigure&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="456px" data-flex-grow="190" height="508" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2RPD4K.png" width="966"&gt;&lt;/p&gt;&#10;&lt;p&gt;显示启动成功，但网页访问无显示&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="553px" data-flex-grow="230" height="275" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2RPLMy.png" width="634"&gt;&lt;/p&gt;&#10;&lt;p&gt;重启整个GitLab服务&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo gitlab-ctl restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nginx报错无法启动&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="612px" data-flex-grow="255" height="199" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2RPUFj.png" width="508"&gt;&lt;/p&gt;&#10;&lt;h2 id="查找原因"&gt;&lt;a href="#%e6%9f%a5%e6%89%be%e5%8e%9f%e5%9b%a0" class="header-anchor"&gt;&lt;/a&gt;查找原因&#10;&lt;/h2&gt;&lt;p&gt;既然报错，那就只能爬日志看看问题在哪里&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gitlab-ctl tail&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;报文件存在&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; chpst: fatal: unable to run: /opt/gitlab/embedded/sbin/nginx: file does not exist&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1139px" data-flex-grow="474" height="183" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2RPzVc.png" width="869"&gt;&lt;/p&gt;&#10;&lt;p&gt;网上查了查，似乎是宝塔的问题， 原因应该是为了防止nginx冲突, 把gitlab的nginx启动文件名改成了gitlab-web, 但有个配置文件没改造成的&lt;/p&gt;&#10;&lt;h2 id="解决"&gt;&lt;a href="#%e8%a7%a3%e5%86%b3" class="header-anchor"&gt;&lt;/a&gt;解决&#10;&lt;/h2&gt;&lt;p&gt;修改nginx启动文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vi /opt/gitlab/sv/nginx/run&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;把&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exec&lt;/span&gt; chpst -P /opt/gitlab/embedded/sbin/nginx -p /var/opt/gitlab/nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改为&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exec&lt;/span&gt; chpst -P /opt/gitlab/embedded/sbin/gitlab-web -p /var/opt/gitlab/nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1416px" data-flex-grow="590" height="120" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2RP9fG.png" width="708"&gt;&lt;/p&gt;&#10;&lt;p&gt;重启nginx服务，启动成功，问题解决&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1960px" data-flex-grow="816" height="54" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2RPxLX.png" width="441"&gt;&lt;/p&gt;&#10;</description></item><item><title>阿里云CDN加速的一些经历</title><link>https://blog.fjy8018.top/archives/145/</link><pubDate>Mon, 09 Apr 2018 22:54:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/145/</guid><description>&lt;h2 id="问题产生"&gt;&lt;a href="#%e9%97%ae%e9%a2%98%e4%ba%a7%e7%94%9f" class="header-anchor"&gt;&lt;/a&gt;问题产生&#10;&lt;/h2&gt;&lt;p&gt;最近有一个新的业务系统上线运行，源站使用8085端口，通过Nginx反向代理到80和443端口，为了保证全国的延迟在50ms以内，故启用CDN加速，仅对js和css等静态文件加速，其余文件自动回源，然而一旦开启了静态文件CDN后，网页便无法渲染（Vue），通过控制台查看，报重定向（301）过多的错误&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1448px" data-flex-grow="603" height="315" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mKrru.png" width="1901"&gt;&lt;/p&gt;&#10;&lt;p&gt;一旦关闭CDN对js和css的加速后再清除浏览器缓存就立刻可以访问&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="410px" data-flex-grow="170" height="536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mKHka.png" width="916"&gt;&lt;/p&gt;&#10;&lt;h2 id="寻找解决办法"&gt;&lt;a href="#%e5%af%bb%e6%89%be%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;寻找解决办法&#10;&lt;/h2&gt;&lt;p&gt;经过网上查阅资料无果后向阿里云提交工单咨询&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1074px" data-flex-grow="447" height="230" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mKJCc.png" width="1030"&gt;&lt;/p&gt;&#10;&lt;p&gt;过程十分曲折，在阿里云工程师的指引下反复修改CDN各种配置，从上午一直修改到晚上10点，更换了3个工程师（从工号判断），其中还包括阿里工程师直接打电话询问问题情况（好评）&#10;测试途径包括但不限于：跟随回源协议、抓包等&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2749px" data-flex-grow="1145" height="77" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mYX1D.png" width="882"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2376px" data-flex-grow="990" height="80" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mEdHG.png" width="792"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2227px" data-flex-grow="928" height="75" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mEYgX.png" width="696"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1021px" data-flex-grow="425" height="160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mEo0y.png" width="681"&gt;&lt;/p&gt;&#10;&lt;h2 id="目前折衷方案"&gt;&lt;a href="#%e7%9b%ae%e5%89%8d%e6%8a%98%e8%a1%b7%e6%96%b9%e6%a1%88" class="header-anchor"&gt;&lt;/a&gt;目前折衷方案&#10;&lt;/h2&gt;&lt;p&gt;根据阿里的建议，现在只能暂停对静态文件的加速，全部回源到源站&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="3088px" data-flex-grow="1286" height="68" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mKydj.png" width="875"&gt;&lt;/p&gt;&#10;&lt;h2 id="造成的影响"&gt;&lt;a href="#%e9%80%a0%e6%88%90%e7%9a%84%e5%bd%b1%e5%93%8d" class="header-anchor"&gt;&lt;/a&gt;造成的影响&#10;&lt;/h2&gt;&lt;p&gt;2018年4月9日全天整个业务系统通过域名访问处于崩溃状态，对所有需要访问的客户重定向到IP+端口号的地址，并且该地址还一直被微信拦截（微信拦截非80端口的网址）&lt;/p&gt;&#10;</description></item><item><title>Typecho Pinghsu 主题加入备案信息</title><link>https://blog.fjy8018.top/archives/136/</link><pubDate>Sat, 17 Mar 2018 00:01:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/136/</guid><description>&lt;h2 id="修改前"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e5%89%8d" class="header-anchor"&gt;&lt;/a&gt;修改前&#10;&lt;/h2&gt;&lt;p&gt;一般安装好typecho和主题后默认的底部信息如下，此时发现没有显示ICP备案信息&#10;&lt;img alt="默认的底部信息" class="gallery-image" data-flex-basis="516px" data-flex-grow="215" height="130" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5XvL.png" width="280"&gt;&lt;/p&gt;&#10;&lt;h2 id="修改目的"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e7%9b%ae%e7%9a%84" class="header-anchor"&gt;&lt;/a&gt;修改目的&#10;&lt;/h2&gt;&lt;p&gt;根据国家法律法规要求备案后，是需要在页面底部增加ICP备案信息和链接的，否则将可能会面临相应的处罚&#10;&lt;img alt="国家法律法规" class="gallery-image" data-flex-basis="287px" data-flex-grow="119" height="781" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5RMR.png" width="937"&gt;&lt;/p&gt;&#10;&lt;h2 id="修改教程"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e6%95%99%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;修改教程&#10;&lt;/h2&gt;&lt;p&gt;首先以admin账号登录控制台，选择修改外观&#10;&lt;img alt="登录" class="gallery-image" data-flex-basis="728px" data-flex-grow="303" height="620" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5pYv.png" width="1883"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="修改外观" class="gallery-image" data-flex-basis="288px" data-flex-grow="120" height="240" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5jjD.png" width="288"&gt;&lt;/p&gt;&#10;&lt;p&gt;选择编辑当前外观，打开&lt;code&gt;footer.php&lt;/code&gt;&#10;&lt;img alt="编辑当前外观" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/f257c41e141ceda08e4e.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;找到大约位于32行的&lt;code&gt;info-text&lt;/code&gt;div标签，在&lt;code&gt;&amp;amp;copy; &lt;/code&gt;后加入如下代码，备案号换成自己的备案号即可&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;ICP&amp;lt;a href=&amp;quot;http://www.miitbeian.gov.cn/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; 粤ICP备18026XXX号&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="备案号" class="gallery-image" data-flex-basis="641px" data-flex-grow="267" height="623" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5Sui.png" width="1666"&gt;&lt;/p&gt;&#10;&lt;p&gt;最后点击保存即可&#10;&lt;img alt="保存" class="gallery-image" data-flex-basis="443px" data-flex-grow="184" height="649" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5P6w.png" width="1199"&gt;&lt;/p&gt;&#10;&lt;h2 id="最终效果"&gt;&lt;a href="#%e6%9c%80%e7%bb%88%e6%95%88%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;最终效果&#10;&lt;/h2&gt;&lt;p&gt;访问有ICP备案号的&lt;a class="link" href="https://www.fjy8018.xin/" target="_blank" rel="noopener"&#10; &gt;博客链接&lt;/a&gt;&#10;&lt;img alt="最终效果" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="121" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2Jari7.png" width="217"&gt;&lt;/p&gt;&#10;</description></item><item><title>阿里云CDN加速使用方法</title><link>https://blog.fjy8018.top/archives/135/</link><pubDate>Fri, 16 Mar 2018 23:52:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/135/</guid><description>&lt;h2 id="前提条件"&gt;&lt;a href="#%e5%89%8d%e6%8f%90%e6%9d%a1%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;前提条件&#10;&lt;/h2&gt;&lt;p&gt;使用国内CDN加速服务前提条件几乎都是：&lt;strong&gt;网站必须已经备案&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="cdn作用"&gt;&lt;a href="#cdn%e4%bd%9c%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;CDN作用&#10;&lt;/h2&gt;&lt;p&gt;CDN（云分发）可以结合优质的网络节点资源、传输路由技术优势，有效降低用户访问延迟，提升可用性。具有按需计费，资源弹性扩容等特点。&#10;说白了就是能加快访问速度&lt;/p&gt;&#10;&lt;h2 id="教程"&gt;&lt;a href="#%e6%95%99%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;教程&#10;&lt;/h2&gt;&lt;h3 id="开启阿里云cdn服务"&gt;&lt;a href="#%e5%bc%80%e5%90%af%e9%98%bf%e9%87%8c%e4%ba%91cdn%e6%9c%8d%e5%8a%a1" class="header-anchor"&gt;&lt;/a&gt;开启阿里云CDN服务&#10;&lt;/h3&gt;&lt;p&gt;在阿里云处购买CDN服务，考虑到仅仅为了学习和测试，因此本人的CDN服务购买流量为20G，开通后会有邮件提醒&#10;&lt;img alt="开启阿里云CDN服务" class="gallery-image" data-flex-basis="368px" data-flex-grow="153" height="568" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J53M1.png" width="871"&gt;&lt;/p&gt;&#10;&lt;h3 id="配置阿里云cdn"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e9%98%bf%e9%87%8c%e4%ba%91cdn" class="header-anchor"&gt;&lt;/a&gt;配置阿里云CDN&#10;&lt;/h3&gt;&lt;p&gt;在阿里云首页登录控制台，进入CDN控制台&#10;&lt;img alt="登录控制台" class="gallery-image" data-flex-basis="1667px" data-flex-grow="694" height="94" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J57UJ.png" width="653"&gt;&lt;/p&gt;&#10;&lt;p&gt;选择域名管理，添加需要加速的域名&#10;&lt;img alt="进入CDN控制台" class="gallery-image" data-flex-basis="397px" data-flex-grow="165" height="429" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5vf0.png" width="710"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="添加需要加速的域名" class="gallery-image" data-flex-basis="2353px" data-flex-grow="980" height="113" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5qvr.png" width="1108"&gt;&lt;/p&gt;&#10;&lt;p&gt;逐步配置&#10;&lt;img alt="逐步配置" class="gallery-image" data-flex-basis="321px" data-flex-grow="133" height="619" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5WlF.png" width="829"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="图片加速" class="gallery-image" data-flex-basis="669px" data-flex-grow="279" height="554" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J54fe.png" width="1546"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="协议" class="gallery-image" data-flex-basis="4222px" data-flex-grow="1759" height="84" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5Clc.png" width="1478"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置HTTPS，上传SSL证书&#10;&lt;img alt="配置HTTPS" class="gallery-image" data-flex-basis="1496px" data-flex-grow="623" height="242" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5mLN.png" width="1509"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置好后等待1-2分钟会生成CDN加速的域名&#10;&lt;img alt="生成CDN加速的域名" class="gallery-image" data-flex-basis="2786px" data-flex-grow="1161" height="118" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5MYt.png" width="1370"&gt;&lt;/p&gt;&#10;&lt;p&gt;复制加速域名，登录自己的域名控制台，设置加速域名的解析&#10;&lt;img alt="域名控制台" class="gallery-image" data-flex-basis="118px" data-flex-grow="49" height="520" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5AjM.png" width="257"&gt;&lt;/p&gt;&#10;&lt;h3 id="配置加速域名解析"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e5%8a%a0%e9%80%9f%e5%9f%9f%e5%90%8d%e8%a7%a3%e6%9e%90" class="header-anchor"&gt;&lt;/a&gt;配置加速域名解析&#10;&lt;/h3&gt;&lt;p&gt;解析为CNAME，即解析到另一域名&#10;&lt;img alt="解析为CNAME" class="gallery-image" data-flex-basis="6964px" data-flex-grow="2901" height="52" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J55V6.png" width="1509"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="解析到另一域名" class="gallery-image" data-flex-basis="422px" data-flex-grow="176" height="450" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J584T.png" width="793"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;配置好后等待20-30分钟才会生效&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="检查加速域名解析是否生效"&gt;&lt;a href="#%e6%a3%80%e6%9f%a5%e5%8a%a0%e9%80%9f%e5%9f%9f%e5%90%8d%e8%a7%a3%e6%9e%90%e6%98%af%e5%90%a6%e7%94%9f%e6%95%88" class="header-anchor"&gt;&lt;/a&gt;检查加速域名解析是否生效&#10;&lt;/h3&gt;&lt;p&gt;这里使用&lt;code&gt;Windows powershell&lt;/code&gt;命令行工具&lt;code&gt;ping&lt;/code&gt;目标地址，若解析到&lt;code&gt;**.kunluncan.com&lt;/code&gt;则已经生效&#10;&lt;img alt="检查加速域名解析是否生效" class="gallery-image" data-flex-basis="837px" data-flex-grow="348" height="170" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5chK.png" width="593"&gt;&lt;/p&gt;&#10;&lt;h3 id="监控"&gt;&lt;a href="#%e7%9b%91%e6%8e%a7" class="header-anchor"&gt;&lt;/a&gt;监控&#10;&lt;/h3&gt;&lt;p&gt;在多次访问后查看监控才会有流量显示，包含命中率和流量信息&#10;&lt;img alt="监控" class="gallery-image" data-flex-basis="4732px" data-flex-grow="1972" height="68" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5HF7.png" width="1341"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="流量显示" class="gallery-image" data-flex-basis="639px" data-flex-grow="266" height="641" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5GAs.png" width="1707"&gt;&lt;/p&gt;&#10;&lt;h2 id="多地访问测试"&gt;&lt;a href="#%e5%a4%9a%e5%9c%b0%e8%ae%bf%e9%97%ae%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;多地访问测试&#10;&lt;/h2&gt;&lt;p&gt;使用第三方网站进行全国多地的ping测试，可看到原本只有一个固定ip的博客网站已经被加速为34+个CDN加速IP地址，国内访问速度均在50ms以内&#10;&lt;img alt="多地访问测试" class="gallery-image" data-flex-basis="319px" data-flex-grow="133" height="916" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2J5bGu.png" width="1219"&gt;&lt;/p&gt;&#10;</description></item><item><title>使用宝塔部署Java Web服务</title><link>https://blog.fjy8018.top/archives/73/</link><pubDate>Wed, 24 Jan 2018 20:30:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/73/</guid><description>&lt;h2 id="环境准备"&gt;&lt;a href="#%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;环境准备&#10;&lt;/h2&gt;&lt;p&gt;之前的文章讲到使用宝塔搭建树莓派运维环境，搭建nextcloud应用，现在在原有基础上搭建小型Java web服务&lt;/p&gt;&#10;&lt;h2 id="工程准备"&gt;&lt;a href="#%e5%b7%a5%e7%a8%8b%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;工程准备&#10;&lt;/h2&gt;&lt;p&gt;以下是在Windows环境中用myeclipse编写好的&lt;code&gt;java web&lt;/code&gt;工程，将其打包为&lt;code&gt;zip&lt;/code&gt;文件&#10;&lt;img alt="javaweb1.png" class="gallery-image" data-flex-basis="2160px" data-flex-grow="900" height="30" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygNZa.png" width="270"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb2.png" class="gallery-image" data-flex-basis="2600px" data-flex-grow="1083" height="24" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yg7n0.png" width="260"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb3.png" class="gallery-image" data-flex-basis="446px" data-flex-grow="186" height="138" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygWEJ.png" width="257"&gt;&lt;/p&gt;&#10;&lt;h3 id="上传工程文件"&gt;&lt;a href="#%e4%b8%8a%e4%bc%a0%e5%b7%a5%e7%a8%8b%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;上传工程文件&#10;&lt;/h3&gt;&lt;p&gt;进入宝塔面板，选择文件，进入Tomcat文件目录&lt;code&gt;/www/server/tomcat/webapps&lt;/code&gt;&#10;&lt;img alt="javaweb4.png" class="gallery-image" data-flex-basis="255px" data-flex-grow="106" height="676" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygvTd.png" width="721"&gt;&lt;/p&gt;&#10;&lt;p&gt;上传压缩好的工程文件&#10;&lt;img alt="javaweb5.png" class="gallery-image" data-flex-basis="229px" data-flex-grow="95" height="711" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygh71.png" width="679"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb6.png" class="gallery-image" data-flex-basis="237px" data-flex-grow="98" height="720" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygQ8u.png" width="711"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击命令行按钮，输入解压命令&lt;code&gt;unzip OrderBooks.zip&lt;/code&gt;&#10;&lt;img alt="javaweb7.png" class="gallery-image" data-flex-basis="325px" data-flex-grow="135" height="589" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygaXD.png" width="799"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb8.png" class="gallery-image" data-flex-basis="529px" data-flex-grow="220" height="842" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yg0aL.png" width="1857"&gt;&lt;/p&gt;&#10;&lt;p&gt;解压完成后修改权限为&lt;code&gt;777&lt;/code&gt;，所有者为&lt;code&gt;www&lt;/code&gt;&#10;&lt;img alt="javaweb9.png" class="gallery-image" data-flex-basis="8315px" data-flex-grow="3464" height="65" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygj2v.png" width="2252"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb10.png" class="gallery-image" data-flex-basis="318px" data-flex-grow="132" height="432" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygp1i.png" width="573"&gt;&lt;/p&gt;&#10;&lt;h3 id="修改tomcat工程配置文件"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9tomcat%e5%b7%a5%e7%a8%8b%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;修改Tomcat工程配置文件&#10;&lt;/h3&gt;&lt;p&gt;进入Tomcat下的&lt;code&gt;conf&lt;/code&gt;目录，找到``server.xml&lt;code&gt;文件，配置工程的实际路径和地址栏显示路径，&lt;/code&gt;path&lt;code&gt;后为显示路径，&lt;/code&gt;docBase```为实际路径，修改后保存&#10;&lt;img alt="javaweb10-1.png" class="gallery-image" data-flex-basis="736px" data-flex-grow="306" height="749" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygF7R.png" width="2297"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb10-2.png" class="gallery-image" data-flex-basis="716px" data-flex-grow="298" height="206" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygSEW.png" width="615"&gt;&lt;/p&gt;&#10;&lt;h3 id="开放防火墙端口"&gt;&lt;a href="#%e5%bc%80%e6%94%be%e9%98%b2%e7%81%ab%e5%a2%99%e7%ab%af%e5%8f%a3" class="header-anchor"&gt;&lt;/a&gt;开放防火墙端口&#10;&lt;/h3&gt;&lt;p&gt;进入安全面板，在防火墙中放行&lt;code&gt;8080&lt;/code&gt;端口&#10;&lt;img alt="javaweb14.png" class="gallery-image" data-flex-basis="404px" data-flex-grow="168" height="416" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygBew.png" width="701"&gt;&lt;/p&gt;&#10;&lt;h3 id="启动tomcat服务"&gt;&lt;a href="#%e5%90%af%e5%8a%a8tomcat%e6%9c%8d%e5%8a%a1" class="header-anchor"&gt;&lt;/a&gt;启动Tomcat服务&#10;&lt;/h3&gt;&lt;p&gt;进入软件管理面板，找到&lt;code&gt;Tomcat 8&lt;/code&gt; ，点击&lt;code&gt;设置&lt;/code&gt;，选择&lt;code&gt;重启&lt;/code&gt;&#10;&lt;img alt="javaweb11.png" class="gallery-image" data-flex-basis="5618px" data-flex-grow="2341" height="97" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygP98.png" width="2271"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb12.png" class="gallery-image" data-flex-basis="271px" data-flex-grow="113" height="840" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygxwg.png" width="950"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="javaweb13.png" class="gallery-image" data-flex-basis="429px" data-flex-grow="178" height="749" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygT8X.png" width="1339"&gt;&lt;/p&gt;&#10;&lt;h2 id="完成"&gt;&lt;a href="#%e5%ae%8c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;完成&#10;&lt;/h2&gt;&lt;p&gt;浏览器中打开树莓派IP+8080端口号+server.xml配置的路径名即可看到Java web服务已正常运行&#10;&lt;img alt="javaweb15.png" class="gallery-image" data-flex-basis="1118px" data-flex-grow="465" height="519" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yg9BG.png" width="2418"&gt;&lt;/p&gt;&#10;</description></item><item><title>使用宝塔安装nextcloud私有云服务</title><link>https://blog.fjy8018.top/archives/53/</link><pubDate>Wed, 24 Jan 2018 16:49:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/53/</guid><description>&lt;h2 id="最终效果"&gt;&lt;a href="#%e6%9c%80%e7%bb%88%e6%95%88%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;最终效果&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="nextcloud0.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/105114d1832cde042c55.png"&gt;&lt;/p&gt;&#10;&lt;h2 id="步骤"&gt;&lt;a href="#%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;步骤&#10;&lt;/h2&gt;&lt;p&gt;之前的文章讲到使用宝塔运维树莓派Ubuntu16.04系统，现在在原有基础上搭建个人私有云服务nextcloud，与owncloud搭建方法几乎一致&lt;/p&gt;&#10;&lt;h3 id="下载"&gt;&lt;a href="#%e4%b8%8b%e8%bd%bd" class="header-anchor"&gt;&lt;/a&gt;下载&#10;&lt;/h3&gt;&lt;p&gt;百度搜索&lt;code&gt;nextcloud&lt;/code&gt;即可找到官方下载地址，选择&lt;code&gt;download&lt;/code&gt;，下载&lt;code&gt;zip&lt;/code&gt;版本文件&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud1.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/59e081402b983d81bef7.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud2.png" class="gallery-image" data-flex-basis="285px" data-flex-grow="118" height="430" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygYhe.png" width="511"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud3.png" class="gallery-image" data-flex-basis="332px" data-flex-grow="138" height="495" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygd9s.png" width="686"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud4.png" class="gallery-image" data-flex-basis="2764px" data-flex-grow="1151" height="27" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ygKeN.png" width="311"&gt;&lt;/p&gt;&#10;&lt;h3 id="准备站点"&gt;&lt;a href="#%e5%87%86%e5%a4%87%e7%ab%99%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;准备站点&#10;&lt;/h3&gt;&lt;p&gt;进入宝塔面板，选择&lt;code&gt;网站&lt;/code&gt;，点击&lt;code&gt;添加站点&lt;/code&gt;&#10;&lt;img alt="nextcloud5.png" class="gallery-image" data-flex-basis="478px" data-flex-grow="199" height="669" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykJBT.png" width="1333"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud5.5.png" class="gallery-image" data-flex-basis="1233px" data-flex-grow="513" height="86" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykyw7.png" width="442"&gt;&lt;/p&gt;&#10;&lt;p&gt;输入树莓派的局域网地址或域名，根目录为&lt;code&gt;wwwroot&lt;/code&gt;&#10;&lt;img alt="nextcloud6.png" class="gallery-image" data-flex-basis="326px" data-flex-grow="135" height="618" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yk2A6.png" width="840"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击&lt;code&gt;文件&lt;/code&gt;&#10;&lt;img alt="nextcloud7.png" class="gallery-image" data-flex-basis="354px" data-flex-grow="147" height="631" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykgJM.png" width="931"&gt;&lt;/p&gt;&#10;&lt;p&gt;默认打开的根目录即&lt;code&gt;wwwroot&lt;/code&gt;,此处可见自动生成的站点文件&#10;&lt;img alt="nextcloud8.png" class="gallery-image" data-flex-basis="495px" data-flex-grow="206" height="540" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykk4t.png" width="1115"&gt;&lt;/p&gt;&#10;&lt;p&gt;在浏览器中打开树莓派地址加&lt;code&gt;/index.html&lt;/code&gt;可见站点创建成功&#10;&lt;img alt="nextcloud9.png" class="gallery-image" data-flex-basis="558px" data-flex-grow="232" height="887" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yktbF.png" width="2064"&gt;&lt;/p&gt;&#10;&lt;h3 id="上传nextcloud"&gt;&lt;a href="#%e4%b8%8a%e4%bc%a0nextcloud" class="header-anchor"&gt;&lt;/a&gt;上传nextcloud&#10;&lt;/h3&gt;&lt;p&gt;回到宝塔，点击&lt;code&gt;上传&lt;/code&gt;，选择下载好的&lt;code&gt;nextcloud&lt;/code&gt;文件，点击上传，直到显示&lt;code&gt;已上传成功&lt;/code&gt;&#10;&lt;img alt="nextcloud10.png" class="gallery-image" data-flex-basis="446px" data-flex-grow="186" height="629" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykZKr.png" width="1170"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud11.png" class="gallery-image" data-flex-basis="228px" data-flex-grow="95" height="735" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykflJ.png" width="701"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud12.png" class="gallery-image" data-flex-basis="1599px" data-flex-grow="666" height="92" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yk6h0.png" width="613"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击&lt;code&gt;命令行&lt;/code&gt;按钮&#10;&lt;img alt="nextcloud13.png" class="gallery-image" data-flex-basis="391px" data-flex-grow="163" height="605" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykIL1.png" width="988"&gt;&lt;/p&gt;&#10;&lt;p&gt;输入解压命令&lt;code&gt;unzip nextcloud-12.0.4.zip&lt;/code&gt;，等待其自动解压&#10;&lt;img alt="nextcloud14.png" class="gallery-image" data-flex-basis="554px" data-flex-grow="230" height="807" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykeAa.png" width="1864"&gt;&lt;/p&gt;&#10;&lt;p&gt;刷新根目录可见解压好的文件夹，右边显示所有者为&lt;code&gt;root&lt;/code&gt;，显然是错误的&#10;&lt;img alt="nextcloud15.png" class="gallery-image" data-flex-basis="819px" data-flex-grow="341" height="580" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykCJD.png" width="1980"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击&lt;code&gt;权限&lt;/code&gt;，对&lt;code&gt;nextcloud&lt;/code&gt;文件夹授予&lt;code&gt;775&lt;/code&gt;权限&#10;&lt;img alt="nextcloud16.png" class="gallery-image" data-flex-basis="2367px" data-flex-grow="986" height="66" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yklFu.png" width="651"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud17.png" class="gallery-image" data-flex-basis="339px" data-flex-grow="141" height="426" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykc4v.png" width="602"&gt;&lt;/p&gt;&#10;&lt;h3 id="准备数据库"&gt;&lt;a href="#%e5%87%86%e5%a4%87%e6%95%b0%e6%8d%ae%e5%ba%93" class="header-anchor"&gt;&lt;/a&gt;准备数据库&#10;&lt;/h3&gt;&lt;p&gt;点击&lt;code&gt;数据库&lt;/code&gt;，查看数据库密码，&lt;strong&gt;若不是通过宝塔安装MySQL服务者无法在此查看密码&lt;/strong&gt;&#10;&lt;img alt="nextcloud18.png" class="gallery-image" data-flex-basis="351px" data-flex-grow="146" height="687" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yk1KL.png" width="1005"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="nextcloud19.png" class="gallery-image" data-flex-basis="957px" data-flex-grow="399" height="101" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykmji.png" width="403"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用命令&lt;code&gt;mysql -u root -p&lt;/code&gt;，输入密码进入数据库&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;root@fjy-desktop:/home/fjy# mysql -u root -p&#10;Enter password:&#10;Welcome to the MySQL monitor. Commands end with ; or \g.&#10;Your MySQL connection id is 4&#10;Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)&lt;/p&gt;&#10;&lt;p&gt;Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;&#10;&lt;p&gt;Oracle is a registered trademark of Oracle Corporation and/or its&#10;affiliates. Other names may be trademarks of their respective&#10;owners.&lt;/p&gt;&#10;&lt;p&gt;Type &amp;lsquo;help;&amp;rsquo; or &amp;lsquo;\h&amp;rsquo; for help. Type &amp;lsquo;\c&amp;rsquo; to clear the current input statement.&lt;/p&gt;&#10;&lt;p&gt;mysql&amp;gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;输入如下命令创建&lt;code&gt;nextcloud&lt;/code&gt;数据库和数据库用户&#10;&lt;code&gt;CREATE DATABASE nextclouddb;&lt;/code&gt;&#10;&lt;code&gt;GRANT ALL ON nextclouddb.* TO nextclouddbuser@localhost IDENTIFIED BY 'nextcloud';&lt;/code&gt;&#10;&lt;code&gt;flush privileges;&lt;/code&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;mysql&amp;gt; CREATE DATABASE nextclouddb;&#10;Query OK, 1 row affected (0.00 sec)&lt;/p&gt;&#10;&lt;p&gt;mysql&amp;gt; GRANT ALL ON nextclouddb.* TO nextclouddbuser@localhost IDENTIFIED BY &amp;gt;&amp;lsquo;nextcloud&amp;rsquo;;&#10;Query OK, 0 rows affected, 1 warning (0.00 sec)&lt;/p&gt;&#10;&lt;p&gt;mysql&amp;gt; flush privileges;&#10;Query OK, 0 rows affected (0.00 sec)&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="准备php扩展环境"&gt;&lt;a href="#%e5%87%86%e5%a4%87php%e6%89%a9%e5%b1%95%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;准备php扩展环境&#10;&lt;/h3&gt;&lt;p&gt;nextcloud还需其他的PHP扩展环境，运行命令&lt;code&gt;apt-get install php-mysql php-json php-xml php-mbstring php-zip php-gd curl php-curl &amp;gt;php-pdo&lt;/code&gt;自动安装扩展&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;root@fjy-desktop:/home/fjy# apt-get install php-mysql php-json php-xml php-mbstring php-zip php-gd curl php-curl &amp;gt;php-pdo&#10;正在读取软件包列表&amp;hellip; 完成&#10;正在分析软件包的依赖关系树&#10;正在读取状态信息&amp;hellip; 完成&#10;注意，选中 &amp;lsquo;php7.0-common&amp;rsquo; 而非 &amp;lsquo;php-pdo&amp;rsquo;&#10;curl 已经是最新版 (7.47.0-1ubuntu2.5)。&#10;将会同时安装下列软件：&#10;php-common php7.0-curl php7.0-gd php7.0-json php7.0-mbstring php7.0-mysql&#10;php7.0-xml php7.0-zip&#10;下列【新】软件包将被安装：&#10;php-common php-curl php-gd php-json php-mbstring php-mysql php-xml php-zip&#10;php7.0-common php7.0-curl php7.0-gd php7.0-json php7.0-mbstring php7.0-mysql&#10;php7.0-xml php7.0-zip&#10;升级了 0 个软件包，新安装了 16 个软件包，要卸载 0 个软件包，有 249 个软件包未被升级。&#10;需要下载 1,508 kB 的归档。&#10;解压缩后会消耗 6,490 kB 的额外空间。&#10;选择Y&#10;您希望继续执行吗？ [Y/n] Y&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="安装nextcloud"&gt;&lt;a href="#%e5%ae%89%e8%a3%85nextcloud" class="header-anchor"&gt;&lt;/a&gt;安装nextcloud&#10;&lt;/h3&gt;&lt;p&gt;地址栏输入树莓派IP+文件地址即可打开nextcloud页面，此处打开&lt;code&gt;http://192.168.1.187/nextcloud&lt;/code&gt;&#10;&lt;img alt="nextcloud20.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/31df481befd24dd07644.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;按照之前设置的信息进行配置，&lt;strong&gt;注意，若报&lt;code&gt;SQLSTATE[HY000] [2002]&lt;/code&gt;错误，则将&lt;code&gt;localhost&lt;/code&gt;改为&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/strong&gt;&#10;&lt;img alt="nextcloud21.png" class="gallery-image" data-flex-basis="107px" data-flex-grow="44" height="1039" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykHvw.png" width="466"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置后若不会自动跳转则自行输入&lt;code&gt;http://192.168.1.187/nextcloud&lt;/code&gt;进行登录&#10;&lt;img alt="nextcloud22.png" class="gallery-image" data-flex-basis="345px" data-flex-grow="143" height="537" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykGlW.png" width="773"&gt;&lt;/p&gt;&#10;&lt;p&gt;登陆后nextcloud安装完成！&#10;&lt;img alt="nextcloud23.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/927ab954b160a4adc75a.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>使用宝塔运维Ubuntu 16.04</title><link>https://blog.fjy8018.top/archives/19/</link><pubDate>Tue, 23 Jan 2018 13:11:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/19/</guid><description>&lt;h2 id="系统环境"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;系统环境&#10;&lt;/h2&gt;&lt;p&gt;硬件：树莓派3&#10;&lt;img alt="pi.png" class="gallery-image" data-flex-basis="2002px" data-flex-grow="834" height="162" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykUMd.png" width="1352"&gt;&lt;/p&gt;&#10;&lt;p&gt;CPU：四核1.2GHz Broadcom BCM2837 x64&#10;RAM：1GB&#10;TF容量：32G U1速度&#10;操作系统：ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi&#10;通过简单的方法可烧录TF卡，系统自动安装配置&#10;&lt;img alt="diskimage.png" class="gallery-image" data-flex-basis="901px" data-flex-grow="375" height="99" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykL61.png" width="372"&gt;&lt;/p&gt;&#10;&lt;p&gt;终端输入&lt;code&gt;sudo raspi-config&lt;/code&gt;启动树莓派配置工具，启动ssh服务并开机启动&#10;操作步骤参考：&lt;a class="link" href="https://9sb.org/722" target="_blank" rel="noopener"&#10; &gt;玩转树莓派之Ubuntu MATE for the Raspberry 系统安装&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="安装宝塔"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e5%ae%9d%e5%a1%94" class="header-anchor"&gt;&lt;/a&gt;安装宝塔&#10;&lt;/h2&gt;&lt;p&gt;官方安装要求&#10;安装要求：&#10;内存：128M以上，推荐512M以上（纯面板约占系统10M内存）&#10;硬盘：100M以上可用硬盘空间（纯面板约占20M磁盘空间）&#10;系统：暂时只对 CentOS 6.x / 7.x /Ubuntu/Debian&#10;确保是干净的操作系统，没有安装过其它环境带的Apache/Nginx/php/MySQL&lt;/p&gt;&#10;&lt;p&gt;下面使用putty登录PI，安装宝塔&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="pi-bt1.png" class="gallery-image" data-flex-basis="379px" data-flex-grow="158" height="418" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykFYF.png" width="661"&gt;&lt;/p&gt;&#10;&lt;p&gt;自动运行如下&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;root@fjy-desktop:/# wget -O install.sh &lt;a class="link" href="http://download.bt.cn/install/install-ubuntu.sh" target="_blank" rel="noopener"&#10; &gt;http://download.bt.cn/install/install-ubuntu.sh&lt;/a&gt; &amp;amp;&amp;amp; sudo bash install.sh&#10;&amp;ndash;2018-01-23 13:13:41&amp;ndash; &lt;a class="link" href="http://download.bt.cn/install/install-ubuntu.sh" target="_blank" rel="noopener"&#10; &gt;http://download.bt.cn/install/install-ubuntu.sh&lt;/a&gt;&#10;Resolving download.bt.cn (download.bt.cn)&amp;hellip; 103.224.251.67&#10;Connecting to download.bt.cn (download.bt.cn)|103.224.251.67|:80&amp;hellip; connected.&#10;HTTP request sent, awaiting response&amp;hellip; 200 OK&#10;Length: 13572 (13K) [application/octet-stream]&#10;Saving to: ‘install.sh’&lt;/p&gt;&#10;&lt;p&gt;install.sh 100%[===================&amp;gt;] 13.25K &amp;ndash;.-KB/s in 0s&lt;/p&gt;&#10;&lt;p&gt;2018-01-23 13:13:41 (52.5 MB/s) - ‘install.sh’ saved [13572/13572]&lt;/p&gt;&#10;&lt;p&gt;+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-&#10;| Bt-WebPanel 5.x FOR Ubuntu/Debian&#10;+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-&#10;| Copyright © 2015-2017 BT-SOFT(&lt;a class="link" href="http://www.bt.cn" target="_blank" rel="noopener"&#10; &gt;http://www.bt.cn&lt;/a&gt;) All rights reserved.&#10;+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-&#10;| The WebPanel URL will be http://SERVER_IP:8888 when installed.&#10;+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-&#10;下面选择确定，输入小写y&#10;Do you want to install Bt-Panel to the /www directory now?(y/n): y&#10;然后等待系统自动安装依赖&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;安装完成后会显示如下信息，提供了出事登录用户名和IP地址&#10;==================================================================&#10;Congratulations! Install succeeded!&#10;==================================================================&#10;Bt-Panel: http://113.83.XX.XXX:8888&#10;username: admin&#10;password: 0df18173&#10;Warning:&#10;If you cannot access the panel,&#10;release the following port (8888|888|80|443|20|21) in the security group&#10;==================================================================&#10;Time consumed: 12 Minute!&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;但ip地址一般都是不对的，请自行输入&lt;code&gt;ip addr&lt;/code&gt;查询主机的ip地址&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;pre&gt;&lt;code&gt; root@fjy-desktop:/# ip addr&#10;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1&#10; link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#10; inet 127.0.0.1/8 scope host lo&#10; valid_lft forever preferred_lft forever&#10; inet6 ::1/128 scope host&#10; valid_lft forever preferred_lft forever&#10;2: enxb827eb9e1f8b: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000&#10;link/ether b8:27:eb:9e:1f:8b brd ff:ff:ff:ff:ff:ff&#10;3: wlan0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#10; link/ether b8:27:eb:cb:4a:de brd ff:ff:ff:ff:ff:ff&#10; inet 192.168.31.9/24 brd 192.168.31.255 scope global dynamic wlan0&#10; valid_lft 30658sec preferred_lft 30658sec&#10; inet6 fe80::ab44:81:1f49:ce98/64 scope link&#10; valid_lft forever preferred_lft forever&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;由上可知&lt;code&gt;192.168.31.9&lt;/code&gt;就是我树莓派的局域网地址，因此在浏览器登录的地址为&lt;code&gt;http://192.168.31.9:8888&lt;/code&gt;&#10;&lt;img alt="pi-bt3.png" class="gallery-image" data-flex-basis="443px" data-flex-grow="184" height="1386" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykRur.png" width="2560"&gt;&lt;/p&gt;&#10;&lt;p&gt;输入默认账号密码即可登录，登录后进入如下页面，提示安装全套web服务组件&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="pi-bt4.png" class="gallery-image" data-flex-basis="444px" data-flex-grow="185" height="1383" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykTU0.png" width="2560"&gt;&lt;/p&gt;&#10;&lt;p&gt;这里选择安装LAMP组件套装，因为后面打算安装私有云服务（nextcloud），nextcloud对nginx支持并不友好，需要负载均衡的可以安装LNMP&#10;&lt;img alt="pi-bt6.png" class="gallery-image" data-flex-basis="260px" data-flex-grow="108" height="364" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykSVT.png" width="395"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击一键安装即可&#10;安装状态可以点击左上角的标号查看&#10;&lt;img alt="pi-bt7.png" class="gallery-image" data-flex-basis="331px" data-flex-grow="138" height="874" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykjM7.png" width="1208"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="pi-bt8.png" class="gallery-image" data-flex-basis="255px" data-flex-grow="106" height="769" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykbfs.png" width="820"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击监软件管理，可以安装其他软件，包括Tomcat、gitlab等，安装Tomcat还会自动配置java和javac环境，可以说是非常的方便&#10;&lt;img alt="pi-bt9.png" class="gallery-image" data-flex-basis="150px" data-flex-grow="62" height="684" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykQUe.png" width="429"&gt;&lt;/p&gt;&#10;&lt;p&gt;以后要搭建java web服务，因此这里选择安装Tomcat，版本选择8&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="pi-bt10.png" class="gallery-image" data-flex-basis="505px" data-flex-grow="210" height="1079" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykpP6.png" width="2274"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="pi-bt11.png" class="gallery-image" data-flex-basis="370px" data-flex-grow="154" height="317" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykqGy.png" width="489"&gt;&lt;/p&gt;&#10;&lt;p&gt;最后点击监控面板，打开服务器状态监控&#10;&lt;img alt="pi-bt12.png" class="gallery-image" data-flex-basis="140px" data-flex-grow="58" height="633" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykhYc.png" width="371"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="pi-bt13.png" class="gallery-image" data-flex-basis="431px" data-flex-grow="179" height="1164" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yk3lK.png" width="2091"&gt;&lt;/p&gt;&#10;&lt;p&gt;一段时间后可查看服务器状态曲线图&#10;&lt;img alt="pi-bt14.png" class="gallery-image" data-flex-basis="518px" data-flex-grow="215" height="1047" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykNvN.png" width="2261"&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;有时候安装完成后发现MySQL服务无法被宝塔安装，那么可以到putty中使用命令行自行安装，输入&lt;code&gt;sudo apt-get install mysql-server&lt;/code&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;root@fjy-desktop:/home/fjy# apt-get install mysql-server&#10;正在读取软件包列表&amp;hellip; 完成&#10;正在分析软件包的依赖关系树&#10;正在读取状态信息&amp;hellip; 完成&#10;将会同时安装下列软件：&#10;libaio1 libcgi-fast-perl libcgi-pm-perl libevent-core-2.0-5 libfcgi-perl&#10;libhtml-template-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common&#10;mysql-server-5.7 mysql-server-core-5.7&#10;建议安装：&#10;libipc-sharedcache-perl mailx tinyca&#10;下列【新】软件包将被安装：&#10;libaio1 libcgi-fast-perl libcgi-pm-perl libevent-core-2.0-5 libfcgi-perl&#10;libhtml-template-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common&#10;mysql-server mysql-server-5.7 mysql-server-core-5.7&#10;升级了 0 个软件包，新安装了 12 个软件包，要卸载 0 个软件包，有 249 个软件包未被升级。&#10;需要下载 17.7 MB 的归档。&#10;解压缩后会消耗 140 MB 的额外空间。&#10;您希望继续执行吗？ [Y/n] Y&#10;&lt;strong&gt;之后会弹出如下对话框，输入默认数据库管理员密码即可&lt;/strong&gt;&#10;&lt;img alt="mysql.png" class="gallery-image" data-flex-basis="379px" data-flex-grow="158" height="418" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2yk7jj.png" width="661"&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;有时候安装后会发现Tomcat无法正常启动，进入putty用命令&lt;code&gt;javac&lt;/code&gt;，发现未安装jdk&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;root@fjy-desktop:/var/lib/mysql# javac&#10;The program &amp;lsquo;javac&amp;rsquo; can be found in the following packages:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;default-jdk&lt;/li&gt;&#10;&lt;li&gt;ecj&lt;/li&gt;&#10;&lt;li&gt;gcj-5-jdk&lt;/li&gt;&#10;&lt;li&gt;openjdk-8-jdk-headless&lt;/li&gt;&#10;&lt;li&gt;gcj-4.8-jdk&lt;/li&gt;&#10;&lt;li&gt;gcj-4.9-jdk&#10;Try: apt install &lt;selected package&gt;&#10;root@fjy-desktop:/var/lib/mysql# java -version&#10;openjdk version &amp;ldquo;1.8.0_151&amp;rdquo;&#10;OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)&#10;OpenJDK Client VM (build 25.151-b12, mixed mode)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;则输入&lt;code&gt;sudo apt-get install openjdk-8-jdk&lt;/code&gt;安装jdk环境&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;root@fjy-desktop:/var/lib/mysql# apt-get install openjdk-8-jdk&#10;正在读取软件包列表&amp;hellip; 完成&#10;正在分析软件包的依赖关系树&#10;正在读取状态信息&amp;hellip; 完成&#10;将会同时安装下列软件：&#10;fonts-dejavu-extra libgif7 libice-dev libpthread-stubs0-dev libsm-dev&#10;libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev libxt-dev&#10;openjdk-8-jdk-headless openjdk-8-jre x11proto-core-dev x11proto-input-dev&#10;x11proto-kb-dev xorg-sgml-doctools xtrans-dev&#10;建议安装：&#10;libice-doc libsm-doc libxcb-doc libxt-doc openjdk-8-demo openjdk-8-source&#10;visualvm icedtea-8-plugin&#10;下列【新】软件包将被安装：&#10;fonts-dejavu-extra libgif7 libice-dev libpthread-stubs0-dev libsm-dev&#10;libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev libxt-dev&#10;openjdk-8-jdk openjdk-8-jdk-headless openjdk-8-jre x11proto-core-dev&#10;x11proto-input-dev x11proto-kb-dev xorg-sgml-doctools xtrans-dev&#10;升级了 0 个软件包，新安装了 19 个软件包，要卸载 0 个软件包，有 249 个软件包未被升级。&#10;需要下载 11.8 MB 的归档。&#10;解压缩后会消耗 61.9 MB 的额外空间。&#10;您希望继续执行吗？ [Y/n] Y&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;手动安装JDK后应去Tomcat配置文件中更改JAVA_HOME的路径以确保Tomcat正常运行&#10;查看当前系统jre和jdk路径，输入&lt;code&gt;update-alternatives --config java&lt;/code&gt;和&lt;code&gt;update-alternatives --config javac&lt;/code&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;root@fjy-desktop:/etc# update-alternatives &amp;ndash;config java&#10;链接组 java (提供 /usr/bin/java)中只有一个候选项：/usr/lib/jvm/java-8-openjdk-ar mhf/jre/bin/java&#10;无需配置。&#10;root@fjy-desktop:/etc# update-alternatives &amp;ndash;config javac&#10;链接组 javac (提供 /usr/bin/javac)中只有一个候选项：/usr/lib/jvm/java-8-openjdk- armhf/bin/javac&#10;无需配置。&#10;输入&lt;code&gt;root@fjy-desktop:/etc# vi /etc/init.d/tomcat&lt;/code&gt;进入Tomcat配置文件&#10;找到JAVA_HOME，修改为系统配置的jdk路径&#10;默认为&#10;JAVA_HOME=/usr/java/jdk&#10;CATALINA_HOME=/www/server/tomcat&#10;改成&#10;JAVA_HOME=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-armhf/jre&#10;CATALINA_HOME=/www/server/tomcat&#10;保存退出即可&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;</description></item><item><title>第一篇就用来介绍服务器吧</title><link>https://blog.fjy8018.top/archives/4/</link><pubDate>Mon, 22 Jan 2018 14:33:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/4/</guid><description>&lt;h2 id="1域名"&gt;&lt;a href="#1%e5%9f%9f%e5%90%8d" class="header-anchor"&gt;&lt;/a&gt;1.域名&#10;&lt;/h2&gt;&lt;p&gt;博客域名为阿里万网域名，二级域名为fjy8018.top，一次性买了5年&#10;博客使用的是三级域名：web.fjy8018.top&lt;/p&gt;&#10;&lt;h2 id="2公网ip"&gt;&lt;a href="#2%e5%85%ac%e7%bd%91ip" class="header-anchor"&gt;&lt;/a&gt;2.公网IP&#10;&lt;/h2&gt;&lt;p&gt;博客ip位于美国洛杉矶，为购买vps主机赠送，试用期一年，因为在国外，所以就免备案~&#10;&lt;img alt="公网IP.png" class="gallery-image" data-flex-basis="1140px" data-flex-grow="475" height="183" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykDgu.png" width="870"&gt;&lt;/p&gt;&#10;&lt;h2 id="3vps主机配置"&gt;&lt;a href="#3vps%e4%b8%bb%e6%9c%ba%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;3.VPS主机配置&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;CPU&lt;/strong&gt; 至强E5 单核&#10;&lt;strong&gt;内存&lt;/strong&gt; ECC 512M&#10;&lt;strong&gt;硬盘&lt;/strong&gt; SSD 10G&#10;&lt;strong&gt;带宽&lt;/strong&gt; 1GMbps&#10;&lt;strong&gt;流量&lt;/strong&gt; 1T/月&#10;&lt;img alt="VPS主机配置.png" class="gallery-image" data-flex-basis="257px" data-flex-grow="107" height="1115" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykYdi.png" width="1197"&gt;&lt;/p&gt;&#10;&lt;h2 id="4服务主机"&gt;&lt;a href="#4%e6%9c%8d%e5%8a%a1%e4%b8%bb%e6%9c%ba" class="header-anchor"&gt;&lt;/a&gt;4.服务主机&#10;&lt;/h2&gt;&lt;p&gt;服务主机位于中国广东电信内网，通过frp映射到美国vps&#10;&lt;img alt="frp.png" class="gallery-image" data-flex-basis="478px" data-flex-grow="199" height="1284" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykKpv.png" width="2558"&gt;&lt;/p&gt;&#10;&lt;h2 id="5主机配置"&gt;&lt;a href="#5%e4%b8%bb%e6%9c%ba%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;5.主机配置&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;CPU&lt;/strong&gt; I5-2500s&#10;&lt;strong&gt;内存&lt;/strong&gt; DDR3-1600 4G&#10;&lt;strong&gt;硬盘&lt;/strong&gt; 2.5inch 1T 5400PRM&#10;&lt;strong&gt;其他&lt;/strong&gt; NEC二手机箱，主板，电源，风扇&#10;&lt;strong&gt;网络&lt;/strong&gt; 千兆网卡&#10;&lt;strong&gt;操作系统&lt;/strong&gt; CentOS 7 x64&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;至于如何运维CentOS ，Putty大法好！&lt;/strong&gt;&#10;&lt;img alt="putty.png" class="gallery-image" data-flex-basis="379px" data-flex-grow="158" height="418" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2ykEGD.png" width="661"&gt;&lt;/p&gt;&#10;</description></item></channel></rss>