国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

kubernetes下heapster的部署案例

Ali_ / 2282人閱讀

摘要:舉個例子,我們在這種狀態下創建一個,然后執行在中會發現有了字段,并且裝載了一個是的,這個就是我們這個下的。

注:本案例在我的部署環境下是可行的,但不保證在所有環境下都可行。我盡可能講得直白而詳細,因為我自己也才剛開始接觸,已經做過深入研究的可以瀏覽,若有什么錯誤,煩請指正,感激不盡!

我的環境: K8S1.0.0+flannel+docker1.6的分布式集群。

這里先不贅述flannel的部署了,以后有時間再寫相關的文檔。

1. ServiceAccount與Secret

先講講kubernetes的serviceaccount,我們的服務有時候需要一些帶有隱私信息的東西,token,certification file等等,這些東西我們可以在master上創建,然后在創建pod的時候導入進去。具體可以去看github上的secret.md,那里有具體的例子。

我們執行:

kubectl get serviceaccount

如果如下:

NAME      SECRETS
default   1

那么是正常的(用腳本啟動的kubernetes一般會是這樣的情況) 而如果是:

NAME      SECRETS
default   0

這就麻煩了,用腳本啟動k8s,啟動的時候是會自動創建一個serviceaccount的,而serviceaccount創建出來的時候又會自動創建一個secret作為這個serviceaccount的token。

我們在apiserver的啟動參數中添加:

--admission_control=ServiceAccount

apiserver在啟動的時候會自己創建一個key和crt(見/var/run/kubernetes/apiserver.crtapiserver.key

然后在啟動./kube-controller-manager 時添加flag:

--service_account_private_key_file=/var/run/kubernetes/apiserver.key

這樣啟動k8smaster后,我們就會發現

kubectl get serviceaccount

結果如下:

NAME      SECRETS
default   1

注意,這里可能會啟動apiserver失敗,或者啟動后沒有效果,因為沒有secrets的serviceaccount會保存在etcd中,所以我們在正常啟動前最好刪掉etcd中的舊數據($etcdctl rm --recursive registry)。

正常啟動后我們在這種狀態下創建pod,pod中會加入serviceaccount這個字段,即便我們在創建的json或yaml中不指定,那么它的默認值也會是默認的serviceaccount:default。 而這個serviceaccount的secret就會被導入到pod啟動的containers中。 舉個例子,我們在這種狀態下創建一個pod,然后執行:

[root@vm-56-65 bin]# kubectl  get pods/imgpod -o yaml

在yaml中會發現:

spec:
  containers:
  - image: registry.hub.gome.com.cn/img_server:1.1
    imagePullPolicy: IfNotPresent
    name: imgpod
    resources:
      limits:
        cpu: 600m
        memory: 1181116006400m
    terminationMessagePath: /dev/termination-log
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-n0i1i
      readOnly: true
  dnsPolicy: ClusterFirst
  nodeName: 10.58.56.62
  restartPolicy: Always
  serviceAccountName: default
  volumes:
  - name: default-token-n0i1i
    secret:
      secretName: default-token-n0i1i

有了serviceaccountName字段,并且volumn裝載了一個secret.是的,這個secret:default-token-n0i1i就是我們default這個serviceaccount下的secret。它被裝載到mountPath: /var/run/secrets/kubernetes.io/serviceaccount目錄中,我們如果在slaver上進入相關容器,便可以找到這個目錄和相應的token(注:創建這個pod的json中不用指定serviceaccount,也不用寫volumn字段去掛載secret,這些都會自動完成的,是否可以手動指定呢?期待大神們的指點)。

為什么要先說這些呢? 因為我們的heapster啟動的時候會有這種情況: pod狀態為running,但是反復地restart;我們用webapi查看該pod的日志,發現:

/var/run/secret/kubernetes.io/serviceaccount/token no such file or directory

我認為這是因為heapster在運行時需要向k8smaster做https的連接,但是沒有token和證書是不能連接的,heapster的程序找不到token就error并exit了,k8s會再啟動之,于是就反復restart。

2.解決Heapster的Https訪問問題

如下是我heapster啟動的json(一個replicationcontroller)

heaprep.json:
{
    "apiVersion": "v1",
    "kind": "ReplicationController",
    "metadata": {
        "labels": {
            "name": "heapster"
        },
        "name": "monitoring-heapster-controller"
    },
    "spec": {
        "replicas": 1,
        "selector": {
            "name": "heapster"
        },
        "template": {
            "metadata": {
                "labels": {
                    "name": "heapster"
                }
            },
            "spec": {
                "containers": [
                    {
                        "image": "registry.hub.gome.com.cn/kubernetes/heapster:v0.16.0",
                        "name": "heapster",
            "command":[
                "/heapster",
                "--source=kubernetes:"https://kubernetes:443?auth="",
                "--sink=influxdb:http://10.126.53.10:8086"
            ],
            "resources": {
                        "limits":{
                            "cpu":"0.5",
                            "memory":"1.1Gi"
                        }
                },
             "env": [
              {
                "name": "KUBERNETES_SERVICE_HOST",
                "value": "vm-56-65"
              }
            ]
                    }
                ]
            }
        }
    }
}

這里"env"中的環境變量是必須要加的,否則heapster會報錯,具體什么錯不大記得了,應該是有關10.0.0.1 這個域名的(heapster中的KUBERNETES_SERVICE_HOST變量默認是10.0.0.1)。 *10.0.0.1是k8s集群中master服務的ClusterIP(kubectl get svc 就可以看到),其他slaver是可以通過這個ip:port訪問到master服務的。但是因為heapster做的是https的請求,需要crt證書和token。而10.0.0.1不是一個hostname并且沒有相關的證書(感覺這是heapster最大的一個坑),所以我干脆自己做證書,自己做hosts引導,自己做環境變量。

現在我們需要一個hostname為vm-56-65的證書,執行這些命令:

openssl genrsa -out ca.key 2048

openssl req -x509 -new -nodes -key ca.key -subj "/CN=abc.com" -days 5000 -out ca.crt

openssl genrsa -out server.key 2048

openssl req -new -key server.key -subj "/CN=vm-56-65" -out server.csr

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000

注意,這里兩個 -subj "***"中第二個要寫hostname,且強烈建議第一個subj和第二個不要相同(設為相同可能會導致普通的curl https命令認證失敗)。具體關于證書的生成,可以參考: http://wangzhezhe.github.io/blog/2015/08/05/httpsandgolang/ 執行這些命令后,會生成一系列文件,將它們一并copy到master的/var/run/kubernetes/中,我們的master啟動要用這些證書文件:

./kube-apiserver --logtostderr=true --log-dir=/var/log/ --v=0 --admission_control=ServiceAccount --etcd_servers=http://127.0.0.1:4001 --insecure_bind_address=0.0.0.0 --insecure_port=8080 --kubelet_port=10250 --service-cluster-ip-range=10.0.0.1/24 --allow_privileged=false   --service-node-port-range="30000-35535"   --secure-port=443    --client_ca_file=/var/run/kubernetes/ca.crt  --tls-private-key-file=/var/run/kubernetes/server.key --tls-cert-file=/var/run/kubernetes/server.crt 

這里--secure-port=443 是因為我在heapster訪問master時,沒有采用內部ClusterIP,而是直接訪問物理IP,而端口沒有變,所以將master上apiserver的https監聽端口修改了以便訪問。

這樣啟動了apiserver后,我們再重新create pod。 容器啟動,我們進入pod的日志,看到非常多的:

dial tcp: lookup vm-56-65: no such host

進入容器中修改容器里的/etc/hosts,添加一個:

10.58.56.65 vm-56-65

如前文所說,我這里用了物理ip,當然,如果我們這里配10.0.0.1 也是可以的(如果使用10.0.0.1,api-server啟動的時候就不用再添加--secure-port=443了)。 具體怎么進容器、改hosts這里我就不細講了,大家都懂的~

修改完畢后,再刷新幾次pod的日志,會發現,日志慢慢就不更新了(或者該說,不報錯了),恭喜你,heapster已經在正常跑了。

不止如此,只要再添加一個token的配置,就可以在任何一臺能與10.58.56.65直連的機器上,向apiserver做帶認證的https請求。

heapster最大的好處是其抓取的監控數據可以按pod,container,namespace等方式group,這樣就能進行監控信息的隱私化,即每個k8s的用戶只能看到自己的應用的資源使用情況,而后臺管理者又能看到每臺機器的資源使用情況,類似自動擴容之類的功能就有了一個可靠的信息來源。

以上只是我個人在部署過程中遇到的問題,不能保證這個方案100%可行,我也仍在做進一步的研究,相信heapster還有很多的坑,大家多多交流吧~^_^

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32432.html

相關文章

  • kubernetesheapster部署案例

    摘要:舉個例子,我們在這種狀態下創建一個,然后執行在中會發現有了字段,并且裝載了一個是的,這個就是我們這個下的。 注:本案例在我的部署環境下是可行的,但不保證在所有環境下都可行。我盡可能講得直白而詳細,因為我自己也才剛開始接觸,已經做過深入研究的可以瀏覽,若有什么錯誤,煩請指正,感激不盡! 我的環境: K8S1.0.0+flannel+docker1.6的分布式集群。 這里先不贅述fla...

    Jinkey 評論0 收藏0
  • Kubernetes監控之Heapster介紹

    摘要:在每個上都會運行,它會收集本機以及容器的監控數據。使用這里主要介紹的使用,及可獲取的。參考資料文檔文檔及可用在官方文檔中都介紹的比較齊全。我們沒有采用該方式,是考慮到如果和監控系統相互依賴,會導致異常之后,存在監控系統無法使用的隱患。 什么是Heapster? Heapster是容器集群監控和性能分析工具,天然的支持Kubernetes和CoreOS。Kubernetes有個出名的監控...

    LeviDing 評論0 收藏0
  • macos 本地安裝部署k8s

    摘要:開啟自帶開啟完成之后右下角會回顯示查看安裝的鏡像或查看安裝的容器部署如遇到失效請訪問這里開啟代理然后訪問地址會報錯解決報錯問題將之前的修改成圖片箭頭標注的即可然后在訪問之前的地址使用的方式訪問查看暴露的端口然后訪問獲 1.開啟docker自帶k8s showImg(https://segmentfault.com/img/bVbnUGW?w=1028&h=820); 開啟完成之后右下角...

    microcosm1994 評論0 收藏0
  • kubernetes安裝heapster、influxdb及grafana

    摘要:下載在這里下載修改替換鏡像修改添加,同時把由改為。因為的跟中的的沖突了。修改新增的暴露出來,同時添加創建配置修改下數據源的查看數據總結部署詳解監控 下載yaml 在這里下載deploy/kube-config/influxdb 修改yaml 替換鏡像 gcr.io/google_containers/heapster-grafana:v4.0.2 registry.cn-hangzho...

    waterc 評論0 收藏0
  • 容器監控實踐—Heapster

    摘要:還可以把數據導入到第三方工具展示或使用場景共同組成了一個流行的監控解決方案原生的監控圖表信息來自在中也用到了,將作為,向其獲取,作為水平擴縮容的監控依據監控指標流程首先從獲取集群中所有的信息。 概述 該項目將被廢棄(RETIRED) Heapster是Kubernetes旗下的一個項目,Heapster是一個收集者,并不是采集 1.Heapster可以收集Node節點上的cAdvis...

    DDreach 評論0 收藏0

發表評論

0條評論

Ali_

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<