array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 K8S conul部署 - 爱码网

官网有Helm方式的安装文档(https://www.consul.io/docs/platform/k8s/index.html)

1,k8s环境

2,nfs服务器

二,创建PV

nfs_pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kingsun.nfs1
spec:
  capacity:
    storage: 1Gi
  accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /mnt/nfsdata
    server: 196.1.210.140

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: kingsun.nfs2
spec:
  capacity:
    storage: 1Gi
  accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /mnt/nfsdata
    server: 196.1.210.140
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: kingsun.nfs3
spec:
  capacity:
    storage: 1Gi
  accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /mnt/nfsdata
    server: 196.1.210.140

执行:kubectl apply -f nfs_pv.yaml 创建pv(PersistentVolume)

三,将Consul使用端口通过Service暴露

PortService.yaml

apiVersion: v1
kind: Service
metadata:  
    name: consul  
    labels:    
      name: consul
spec:  
    type: ClusterIP
    clusterIP: None  
    ports:    
      - name: http      
        port: 8500      
        targetPort: 8500    
      - name: https      
        port: 8443      
        targetPort: 8443    
      - name: rpc      
        port: 8400      
        targetPort: 8400    
      - name: serflan-tcp      
        protocol: "TCP"      
        port: 8301      
        targetPort: 8301    
      - name: serflan-udp      
        protocol: "UDP"      
        port: 8301      
        targetPort: 8301    
      - name: serfwan-tcp      
        protocol: "TCP"      
        port: 8302      
        targetPort: 8302    
      - name: serfwan-udp      
        protocol: "UDP"      
        port: 8302      
        targetPort: 8302    
      - name: server      
        port: 8300      
        targetPort: 8300    
      - name: consuldns      
        port: 8600      
        targetPort: 8600  
    selector:    
     app: consul

 

四,编辑ACL配置文件并保存到K8S ConfigMap

Acl.json

{"acl":{
 "enabled":true,
 "default_policy":"deny",
 "enable_token_persistence":true,
 "tokens":{
   "master":"8dc1eb67-1f5f-4e10-ad9d-5e58b047647c",
   "agent":"8dc1eb67-1f5f-4e10-ad9d-5e58b047647c"
 }
}}

 

执行:kubectl create configmap --from-file Acl.json

查看configmap:kubectl get configmap -o yaml

PS G:\KingSun\Consul\Yaml> kubectl get configmap -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    Acl.json: "{\"acl\":{\r\n \"enabled\":true,\r\n \"default_policy\":\"deny\",\r\n
      \"enable_token_persistence\":true,\r\n \"tokens\":{\r\n   \"master\":\"8dc1eb67-1f5f-4e10-ad9d-5e58b047647c\",\r\n
      \  \"agent\":\"8dc1eb67-1f5f-4e10-ad9d-5e58b047647c\"\r\n }\r\n}}"
  kind: ConfigMap
  metadata:
    creationTimestamp: "2019-12-03T08:21:22Z"
    name: consul-acl-config
    namespace: default
    resourceVersion: "771714"
    selfLink: /api/v1/namespaces/default/configmaps/consul-acl-config
    uid: 57507410-e0a2-4979-9c8b-731fe9dc62b8
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

 

五,编辑StateFulSet配置文件创建pod

StateFulSet.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: consul
spec:
  selector: 
    matchLabels:
      app: consul
  serviceName: consul
  replicas: 1
  template: 
    metadata:
      labels:
        app: consul
    spec:
      #affinity:
      #  podAntiAffinity:
      #    requiredDuringSchedulingIgnoredDuringExecution:
      #      - labelSelector:
      #          matchExpressions:
      #            - key: app
      #              operator: In
      #              values:
      #                - consul
      #        topologyKey: kubernetes.io/hostname
      terminationGracePeriodSeconds: 10
      volumes:
        - name: config
          configMap:
            name: consul-acl-config
      containers:
      - name: consul
        image: consul:latest
        volumeMounts:
         - name: config
           mountPath: /consul/config
         - name: data
           mountPath: /consul/data
        command: 
        - "/bin/sh"
        - "-ec"
        - |
          exec /bin/consul agent \
           -server \
           -ui \
           -advertise="$(PODIP)" \
           -bind=0.0.0.0 \
           -client=0.0.0.0 \
           -bootstrap-expect=1 \
           -data-dir=/consul/data \
           -domain=cluster.local \
           -retry-join=consul-0.consul.$(NAMESPACE).svc.cluster.local \
           -disable-host-node-id \
           -datacenter=ks \
           -config-file=/consul/config/Acl.json
        env:
            - name: PODIP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
        ports:
            - containerPort: 8500
              name: ui-port
            - containerPort: 8400
              name: alt-port
            - containerPort: 53
              name: udp-port
            - containerPort: 8443
              name: https-port
            - containerPort: 8080
              name: http-port
            - containerPort: 8301
              name: serflan
            - containerPort: 8302
              name: serfwan
            - containerPort: 8600
              name: consuldns
            - containerPort: 8300
              name: server
  volumeClaimTemplates:
    - metadata:
       name: data
      spec:
       accessModes: ["ReadWriteOnce"]
       resources:
         requests:
           storage: 1Gi
       storageClassName: nfs

 

 执行:kubectl apply -f StateFulSet.yaml

查看consul pod日志:kubectl logs consul-0

查看StateFulSet启动日志:kubectl describe StateFulSet consul

六,通过NodePort Service暴露consul ui

UiService.yaml

apiVersion: v1
kind: Service
metadata:
  name: consul-ui
  labels:
    app: consul
spec:
  selector:
     app: consul
  ports:
   - name: consul-port
     protocol: TCP
     port: 80
     nodePort: 32000
     targetPort: 8500
  type: NodePort
    

 

七,打开ui

先点击"acl"输入Acl.json中定义的master_token

K8S conul部署

 

 

相关文章: