大西瓜说电影 發表於 2019-11-26 16:46:00

Kubernetes部署高可用MongoDB集群

<p>&nbsp;</p>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">在Kubernetes中,部署MongoDB主要用到的是<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.6px; padding: 2px 4px; color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 4px">mongo-db-sidecar</code>。<br style="box-sizing: border-box">Docker Hub</p>
<h3 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 20px">1. 架构</h3>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">Mongodb的集群搭建方式主要有三种,主从模式,Replica set模式,sharding模式, 三种模式各有优劣,适用于不同的场合,属Replica set应用最为广泛,主从模式现在用的较少,sharding模式最为完备,但配置维护较为复杂。<br style="box-sizing: border-box"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.6px; padding: 2px 4px; color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 4px">mongo-db-sidecar</code>使用的是Replica set模式,Mongodb的Replica Set即副本集方式主要有两个目的,一个是数据冗余做故障恢复使用,当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复。另一个是做读写分离,读的请求分流到副本上,减轻主(Primary)的读压力。<br style="box-sizing: border-box">二进制部署MongoDB集群无需其他服务,直接在主节点执行类似以下的命令即可创建集群:</p>
<pre><code class="hljs javascript" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">cfg={ <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">_id</span>:<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"testdb"</span>, <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">members</span>:[ {<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">_id</span>:<span class="hljs-number" style="box-sizing: border-box">0</span>,<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">host</span>:<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'192.168.255.141:27017'</span>,<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">priority</span>:<span class="hljs-number" style="box-sizing: border-box">2</span>}, {<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">_id</span>:<span class="hljs-number" style="box-sizing: border-box">1</span>,<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">host</span>:<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'192.168.255.142:27017'</span>,<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">priority</span>:<span class="hljs-number" style="box-sizing: border-box">1</span>}, {<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">_id</span>:<span class="hljs-number" style="box-sizing: border-box">2</span>,<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">host</span>:<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'192.168.255.142:27019'</span>,<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">arbiterOnly</span>:<span class="hljs-literal" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">true</span>}] };
rs.initiate(cfg)</code></pre>
<hr style="box-sizing: content-box; height: 0; margin: 1.5em auto; border-top: 2px dotted rgba(238, 238, 238, 1); border-right: 0; border-bottom: 0; border-left: 0; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">
<h3 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 20px">2. 部署</h3>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace"><span style="box-sizing: border-box; font-weight: bold">本文是部署Mongodb的实践,因为此服务需要用到<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.6px; padding: 2px 4px; color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 4px">namespace</code>下的<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.6px; padding: 2px 4px; color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 4px">pods</code>的<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.6px; padding: 2px 4px; color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 4px">list</code>权限进行集群操作,所以如果在实际部署时,请记得先进行2.5的RBAC操作,然后再进行2.4的Statefulset部署。</span></p>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">2.1 Namespace</h4>
<pre><code class="hljs sql" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">kubectl <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">create</span> ns mongo</code></pre>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">2.2 StorageClass</h4>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">这里需要提前部署好NFS或者其他可提供SC的存储集群。<br style="box-sizing: border-box">Kubernetes使用NFS做持久化存储</p>
<pre><code class="hljs shell" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"><span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)">#</span><span class="bash" style="box-sizing: border-box"> mongo-clutser-sc.yaml</span>
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: mongodb-data
provisioner: fuseim.pri/ifs
<span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)">
#</span><span class="bash" style="box-sizing: border-box"> create</span>
kubectl create -f mongo-clutser-sc.yaml</code></pre>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">2.3 Headless Service</h4>
<pre><code class="hljs python" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">apiVersion: v1
kind: Service
metadata:
name: mongo
namespace: mongo
labels:
    name: mongo
spec:
ports:
- port: <span class="hljs-number" style="box-sizing: border-box">27017</span>
    targetPort: <span class="hljs-number" style="box-sizing: border-box">27017</span>
clusterIP: <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">None</span>
selector:
    role: mongo</code></pre>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">2.4 Statefulset</h4>
<pre><code class="hljs cpp" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: mongo
<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">namespace</span>: mongo
spec:
serviceName: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"mongo"</span>
replicas: <span class="hljs-number" style="box-sizing: border-box">3</span>
<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">template</span>:
    metadata:
      labels:
      role: mongo
      environment: prod
    spec:
      terminationGracePeriodSeconds: <span class="hljs-number" style="box-sizing: border-box">10</span>
      containers:
      - name: mongo
          image: harbor.s.com/redis/mongo:<span class="hljs-number" style="box-sizing: border-box">3.4</span><span class="hljs-number" style="box-sizing: border-box">.22</span>
          command:
            - mongod
            - <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"--replSet"</span>
            - rs0
            - <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"--bind_ip"</span>
            - <span class="hljs-number" style="box-sizing: border-box">0.0</span><span class="hljs-number" style="box-sizing: border-box">.0</span><span class="hljs-number" style="box-sizing: border-box">.0</span>
            - <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"--smallfiles"</span>
            - <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"--noprealloc"</span>
          ports:
            - containerPort: <span class="hljs-number" style="box-sizing: border-box">27017</span>
          volumeMounts:
            - name: mongo-persistent-storage
            mountPath: /data/db
      - name: mongo-sidecar
          image: harbor.s.com/redis/mongo-k8s-sidecar
          env:
            - name: MONGO_SIDECAR_POD_LABELS
            value: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"role=mongo,environment=prod"</span>
volumeClaimTemplates:
- metadata:
      name: mongo-persistent-storage
    spec:
      accessModes: [<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ReadWriteOnce"</span>]
      storageClassName: mongodb-data
      resources:
      requests:
          storage: <span class="hljs-number" style="box-sizing: border-box">10</span>Gi</code></pre>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">2.5 RBAC</h4>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">这时候查看集群状态,发现是不可用的。</p>
<pre><code class="hljs sql" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">kubectl exec -it mongo-0 -n mongo <span class="hljs-comment" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)">-- mongo</span>
Defaulting container name to mongo.
<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">Use</span> <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'kubectl describe pod/mongo-0 -n mongo'</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">to</span> see all <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">of</span> the containers <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">in</span> this pod.
MongoDB shell <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">version</span> v3<span class="hljs-number" style="box-sizing: border-box">.4</span><span class="hljs-number" style="box-sizing: border-box">.22</span>
connecting <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">to</span>: mongodb://<span class="hljs-number" style="box-sizing: border-box">127.0</span><span class="hljs-number" style="box-sizing: border-box">.0</span><span class="hljs-number" style="box-sizing: border-box">.1</span>:<span class="hljs-number" style="box-sizing: border-box">27017</span>
MongoDB <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">server</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">version</span>: <span class="hljs-number" style="box-sizing: border-box">3.4</span><span class="hljs-number" style="box-sizing: border-box">.22</span>
<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">Server</span> has <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">startup</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">warnings</span>:
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.039</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.039</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL ** <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">WARNING</span>: <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">Access</span> control <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">is</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">not</span> enabled <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">for</span> the database.
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.039</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL **          <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">Read</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">and</span> write <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">access</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">to</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">data</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">and</span> configuration <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">is</span> unrestricted.
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.039</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL ** <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">WARNING</span>: You <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">are</span> running this process <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">as</span> the root <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">user</span>, which <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">is</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">not</span> recommended.
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.039</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.040</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.040</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL ** <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">WARNING</span>: /<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">sys</span>/kernel/mm/transparent_hugepage/enabled <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">is</span> <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'always'</span>.
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.040</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL **      We suggest setting it <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">to</span> <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'never'</span>
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.040</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.040</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL ** <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">WARNING</span>: /<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">sys</span>/kernel/mm/transparent_hugepage/defrag <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">is</span> <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'always'</span>.
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.040</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL **      We suggest setting it <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">to</span> <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'never'</span>
<span class="hljs-number" style="box-sizing: border-box">2019</span><span class="hljs-number" style="box-sizing: border-box">-08</span><span class="hljs-number" style="box-sizing: border-box">-24</span>T09:<span class="hljs-number" style="box-sizing: border-box">23</span>:<span class="hljs-number" style="box-sizing: border-box">57.040</span>+<span class="hljs-number" style="box-sizing: border-box">0000</span> I CONTROL
&gt; rs.status()
{
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"info"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"run rs.initiate(...) if not yet done for the set"</span>,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ok"</span> : <span class="hljs-number" style="box-sizing: border-box">0</span>,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"errmsg"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"no replset config has been received"</span>,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"code"</span> : <span class="hljs-number" style="box-sizing: border-box">94</span>,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"codeName"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"NotYetInitialized"</span>
}
&gt; </code></pre>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">应该是<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.6px; padding: 2px 4px; color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 4px">mongo k8s sidecar</code>没有正确的配置,查看其日志:</p>
<pre><code class="hljs javascript" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">kubectl logs mongo<span class="hljs-number" style="box-sizing: border-box">-0</span> mongo-sidecar -n mongo

···
<span class="hljs-built_in" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">Error</span> <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">in</span> workloop { [<span class="hljs-built_in" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">Error</span>: ]
message:
   { <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">kind</span>: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'Status'</span>,
   <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">apiVersion</span>: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'v1'</span>,
   <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">metadata</span>: {},
   <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">status</span>: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'Failure'</span>,
   <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">message</span>:
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'pods is forbidden: User "system:serviceaccount:mongo:default" cannot list resource "pods" in API group "" at the cluster scope'</span>,
   <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">reason</span>: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'Forbidden'</span>,
   <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">details</span>: { <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">kind</span>: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">'pods'</span> },
   <span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">code</span>: <span class="hljs-number" style="box-sizing: border-box">403</span> },
<span class="hljs-attr" style="box-sizing: border-box; color: rgba(255, 0, 0, 1)">statusCode</span>: <span class="hljs-number" style="box-sizing: border-box">403</span> }</code></pre>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">信息显示默认分配的sa账号没有list此namespace下pods的权限,搜索了下这个问题早在很久之前在github上就有人提出,作者也给出了对应的解决方案,需要给默认的sa账号提权,增加list pods的权限,但是实际测试发现虽然给<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.6px; padding: 2px 4px; color: rgba(199, 37, 78, 1); background-color: rgba(249, 242, 244, 1); border-radius: 4px">system:serviceaccount:mongo:dafault</code>赋予pods的list权限,仍然会报错,以下是rbac配置:<br style="box-sizing: border-box">mongo-k8s-sidecar/role.yaml at 2640ed1c2971b1279c2961efd257cde9fbe39574 · cvallance/mongo-k8s-sidecar · GitHub</p>
<pre><code class="hljs cpp" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"># 使用后仍然无用的配置
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">namespace</span>: mongo
name: mongo-pod-read
rules:
- apiGroups: [<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>]
resources: [<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"pods"</span>]
verbs: [<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"get"</span>, <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"watch"</span>, <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"list"</span>]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: mongo-pod-read
<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">namespace</span>: mongo
subjects:
- kind: ServiceAccount
name: <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">default</span>
<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">namespace</span>: mongo
roleRef:
kind: Role
name: mongo-pod-read
apiGroup: rbac.authorization.k8s.io</code></pre>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">所以我们需要重新想办法,给此sa更大的权限,这里使用默认的clusterrole view权限进行赋权,我们可以使用clusterrole对sa进行界定namespace的赋权,相当于clusterrole是一个可以进行clusterrole与role进行binding的模板:<br style="box-sizing: border-box">GCE - K8s 1.8 - pods is forbidden - Cannot list pods - Unknown user "system:serviceaccount:default:default" · Issue #75 · cvallance/mongo-k8s-sidecar · GitHub</p>
<pre><code class="hljs cs" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"><span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)"># 正确的rbac配置</span>
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: mongo-<span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">default</span>-view
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
    name: <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">default</span>
    <span class="hljs-keyword" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">namespace</span>: <span class="hljs-title" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">mongo</span></code></pre>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">但是pod在创建后,是无法更换sa账号与sa权限的,所以需要重建pod:</p>
<pre><code class="hljs shell" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"><span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)">#</span><span class="bash" style="box-sizing: border-box"> 查看statefulset</span>
kubectl get statefulset -n mongo
NAME    READY   AGE
mongo   3/3   23h
<span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)">
#</span><span class="bash" style="box-sizing: border-box"> scale</span>
kubectl scale statefulset mongo -n mongo --replicas=0
statefulset.apps/mongo scaled
<span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)">
#</span><span class="bash" style="box-sizing: border-box"> 过会重新配置副本数为3</span>
kubectl scale statefulset mongo -n mongo --replicas=3
statefulset.apps/mongo scaled
<span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)">
#</span><span class="bash" style="box-sizing: border-box"> 查看已经建立完毕</span>
kubectl get all -n mongo
NAME          READY   STATUS    RESTARTS   AGE
pod/mongo-0   2/2   Running   0          21s
pod/mongo-1   2/2   Running   0          17s
pod/mongo-2   2/2   Running   0          12s


NAME            TYPE      CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/mongo   ClusterIP   None         &lt;none&gt;      27017/TCP   23h




NAME                     READY   AGE
statefulset.apps/mongo   3/3   23h
</code></pre>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">再次查看集群状态,发现状态已经正常,集群创建成功:</p>
<pre><code class="hljs bash" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">kubectl <span class="hljs-built_in" style="box-sizing: border-box; color: rgba(0, 0, 255, 1)">exec</span> -it mongo-0 -n mongo -- mongo
rs0:PRIMARY&gt; rs.<span class="hljs-function" style="box-sizing: border-box"><span class="hljs-title" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">status</span></span>()
{
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"set"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"rs0"</span>,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"date"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:12.550Z"</span>),
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"myState"</span> : 1,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"term"</span> : NumberLong(2),
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncingTo"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceHost"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceId"</span> : -1,
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"heartbeatIntervalMillis"</span> : NumberLong(2000),
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimes"</span> : {
                <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastCommittedOpTime"</span> : {
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                },
                <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"appliedOpTime"</span> : {
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                },
                <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"durableOpTime"</span> : {
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                }
      },
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"members"</span> : [
                {
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"_id"</span> : 0,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"name"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"10.244.4.87:27017"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"health"</span> : 1,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"state"</span> : 2,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"stateStr"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"SECONDARY"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"uptime"</span> : 19,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optime"</span> : {
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                        },
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimeDurable"</span> : {
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                        },
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimeDate"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:05Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimeDurableDate"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:05Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastHeartbeat"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:11.877Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastHeartbeatRecv"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:11.192Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"pingMs"</span> : NumberLong(0),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastHeartbeatMessage"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncingTo"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"10.244.3.65:27017"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceHost"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"10.244.3.65:27017"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceId"</span> : 3,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"infoMessage"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"configVersion"</span> : 171757
                },
                {
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"_id"</span> : 1,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"name"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"10.244.5.9:27017"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"health"</span> : 1,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"state"</span> : 2,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"stateStr"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"SECONDARY"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"uptime"</span> : 19,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optime"</span> : {
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                        },
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimeDurable"</span> : {
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                        },
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimeDate"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:05Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimeDurableDate"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:05Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastHeartbeat"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:11.875Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastHeartbeatRecv"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:11.478Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"pingMs"</span> : NumberLong(0),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastHeartbeatMessage"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncingTo"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"10.244.4.87:27017"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceHost"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"10.244.4.87:27017"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceId"</span> : 0,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"infoMessage"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"configVersion"</span> : 171757
                },
                {
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"_id"</span> : 3,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"name"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"10.244.3.65:27017"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"health"</span> : 1,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"state"</span> : 1,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"stateStr"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"PRIMARY"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"uptime"</span> : 80,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optime"</span> : {
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ts"</span> : Timestamp(1566723485, 1),
                              <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"t"</span> : NumberLong(2)
                        },
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"optimeDate"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:58:05Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncingTo"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceHost"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"syncSourceId"</span> : -1,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"infoMessage"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"could not find member to sync from"</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"electionTime"</span> : Timestamp(1566723473, 1),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"electionDate"</span> : ISODate(<span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"2019-08-25T08:57:53Z"</span>),
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"configVersion"</span> : 171757,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"self"</span> : <span class="hljs-literal" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">true</span>,
                        <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"lastHeartbeatMessage"</span> : <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">""</span>
                }
      ],
      <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"ok"</span> : 1
}
rs0:PRIMARY&gt;               </code></pre>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">2.6 扩容</h4>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">如果需要对mongo扩容,只需要调整statefulset的replicas即可:</p>
<pre><code class="hljs sql" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">kubectl scale statefulset mongo <span class="hljs-comment" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)">--replicas=4 -n mongo</span></code></pre>
<hr style="box-sizing: content-box; height: 0; margin: 1.5em auto; border-top: 2px dotted rgba(238, 238, 238, 1); border-right: 0; border-bottom: 0; border-left: 0; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">
<h3 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 20px">3. 使用/访问</h3>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">mongo cluster访问默认连接为:</p>
<pre><code class="hljs cpp" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">mongodb:<span class="hljs-comment" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)">//mongo1,mongo2,mongo3:27017/dbname_?</span></code></pre>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">在kubernetes中最常用的FQDN连接服务的连接为:</p>
<pre><code class="hljs shell" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"><span class="hljs-meta" style="box-sizing: border-box; color: rgba(43, 145, 175, 1)">#</span><span class="bash" style="box-sizing: border-box">appName.<span class="hljs-variable" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)">$HeadlessServiceName</span>.<span class="hljs-variable" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)">$Namespace</span>.svc.cluster.local</span></code></pre>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">因为我们采用statefulset部署的pod,所以命名均有规则,所以实际上如果连接4副本的mongodb cluster,上面的默认连接该为(默认为namespace之外):</p>
<pre><code class="hljs cpp" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px">mongodb:<span class="hljs-comment" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)">//mongo-0.mongo.mongo.svc.cluster.local:27017,mongo-1.mongo.mongo.svc.cluster.local:27017,mongo-2.mongo.mongo.svc.cluster.local:27017,mongo-3.mongo.mongo.svc.cluster.local:27017/?replicaSet=rs0</span></code></pre>
<hr style="box-sizing: content-box; height: 0; margin: 1.5em auto; border-top: 2px dotted rgba(238, 238, 238, 1); border-right: 0; border-bottom: 0; border-left: 0; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">
<h3 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 20px">4. 监控</h3>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">使用helm chart prometheus-mongodb-exporter进行监控。</p>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">4.1 部署exporter</h4>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace"><span style="box-sizing: border-box; font-weight: bold">注意,这里的uri后如果是集群,必须使用“”,不然会各种告警,我在这踩了无数的坑</span><br style="box-sizing: border-box">看起来uri是固定的,而不是自动发现,所以如果需要对集群的副本进行增加或删除,则需要helm修改uri,更新配置后重建pod。<br style="box-sizing: border-box">image是为了内网容易部署,将默认image下载后放入harbor,并未做任何其他修改,可忽略。</p>
<pre><code class="hljs python" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"><span class="hljs-comment" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)"># vi values.yaml 编辑定制参数</span>
mongodb:
uri: <span class="hljs-string" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">"mongodb://mongo-0.mongo.mongo.svc.cluster.local:27017,mongo-1.mongo.mongo.svc.cluster.local:27017,mongo-2.mongo.mongo.svc.cluster.local:27017,mongo-3.mongo.mongo.svc.cluster.local:27017/?replicaSet=rs0"</span>
image:
repository: harbor.s.com/mongo/mongodb-exporter
tag: <span class="hljs-number" style="box-sizing: border-box">0.7</span><span class="hljs-number" style="box-sizing: border-box">.0</span></code></pre>
<pre><code class="hljs nginx" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"><span class="hljs-comment" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)"># 部署</span>
<span class="hljs-attribute" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">helm</span> upgrade --install mongo-exporter stable/prometheus-mongodb-exporter -f values.yaml --namespace mongo --force</code></pre>
<pre><code class="hljs nginx" style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0; color: rgba(0, 0, 0, 1); background-color: rgba(0, 0, 0, 0); border-radius: 0; overflow-wrap: normal; display: block; overflow-x: auto; position: relative; margin: 10px 10px 1px 50px"><span class="hljs-comment" style="box-sizing: border-box; color: rgba(0, 128, 0, 1)"># 查看结果</span>
<span class="hljs-attribute" style="box-sizing: border-box; color: rgba(163, 21, 21, 1)">kubectl</span> port-forward service/mongo-exporter-prometheus-mongodb-exporter <span class="hljs-number" style="box-sizing: border-box">9216</span>
curl http://127.0.0.1:9216/metrics</code></pre>
<h4 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 15px">4.2 配置prometheus operator</h4>
<hr style="box-sizing: content-box; height: 0; margin: 1.5em auto; border-top: 2px dotted rgba(238, 238, 238, 1); border-right: 0; border-bottom: 0; border-left: 0; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">
<h3 style="box-sizing: border-box; font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace; line-height: 1.4; color: rgba(102, 102, 102, 1); margin: 30px 0 10px; font-size: 20px">感谢:</h3>
<p style="box-sizing: border-box; margin: 0 0 20px; word-break: break-all; color: rgba(88, 102, 110, 1); font-family: &quot;Source Sans Pro&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, SimSun, Helvetica, Arial, sans-serif, monospace">1.Kubernetes RBAC 详解-www.qikqiak.com|阳明的博客|Kubernetes|Docker|istio|Python|Golang|Cloud Native<br style="box-sizing: border-box">2.使用 StatefulSet 搭建 MongoDB 集群 - Kubernetes - Wiki.Shileizcc.com<br style="box-sizing: border-box">3.GitHub - cvallance/mongo-k8s-sidecar: Kubernetes sidecar for Mongo<br style="box-sizing: border-box">4.MongoDB集群搭建及使用 - SuperMap技术控 - CSDN博客</p><br><br>
来源:https://www.cnblogs.com/evenchen/p/11936706.html
頁: [1]
查看完整版本: Kubernetes部署高可用MongoDB集群