Kubernetes1.3 - K8S安裝

gxlineji發表於2016-08-25

Kubernetes1.3 - K8S安裝

1       Kubernetes規劃

為什麼需要 kubernetes ? 單個docker,如果數量少還好,如果數量多了,就不好管理。因此需要一套管理Docker的叢集

1.1   規劃

Master     192.168.1.11  apiservercontroller-managerscheduler

etcd          192.168.1.11  etcd

NODE       192.168.1.12  Kubernetes+docker

NODE       192.168.1.13  Kubernetes+docker

 

版本:Kubernetes1.3

1.2   前期準備

(以下步驟在所有伺服器上執行)

1.2.1  停止防火牆

systemctl stop firewalld.service

systemctl disable firewalld.service

 

1.2.2  配置yum

掛載系統的安裝ISO檔案

rhel6.5.iso

mount /dev/sr0 /mnt

 

cat >> /etc/yum.repos.d/rhel-source.repo<< EOF

[rhel-source]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=file:///mnt

enabled=1

gpgcheck=1

gpgkey=file:///mnt/RPM-GPG-KEY-redhat-release

EOF

1.2.3  安裝IPTABLES

yum install -y iptables-services

systemctl start iptables.service

systemctl enable iptables.service

 

2       安裝Docker

(在Minion節點安裝docker

Docker文件地址:

2.1   配置安裝源

配置安裝源(方法一)

cat >> /etc/yum.repos.d/docker.repo <<-EOF

[dockerrepo]

name=Docker Repository

baseurl=

enabled=1

gpgcheck=1

gpgkey=

EOF

 

配置安裝源(方法二)

 

cat >> /etc/yum.repos.d/CentOS7-Base-163.repo<< EOF

[base]

name=CentOS-$releasever - Base - 163.com

baseurl=

gpgcheck=1

gpgkey=

#released updates

[updates]

name=CentOS-$releasever - Updates - 163.com

baseurl=

gpgcheck=1

gpgkey=

#additional packages that may be useful

[extras]

name=CentOS-$releasever - Extras - 163.com

baseurl=

gpgcheck=1

gpgkey=

EOF

2.2   安裝

yum install docker

 

啟動docker服務。

service docker start

#關閉防火牆

service firewalld stop

確認docker是否安裝成功。

docker run hello-world

 

3       安裝KUBERNETES

3.1   安裝配置ETCD

3.1.1   下載安裝ETCD

ETCD官方文件

 

etcd無需安裝,下載即可使用

curl -L -o etcd-v3.0.2-linux-amd64.tar.gz

tar xzvf etcd-v3.0.2-linux-amd64.tar.gz

cd etcd-v3.0.2-linux-amd64

./etcd --version

 

mkdir -p /opt/etcd/bin  /opt/etcd/data

 

./etcd

 

mkdir /opt/etcd/data

 

3.1.2  配置ETCD

可參考解壓包裡的官方文件安裝配置ETCD,路徑如下:

more /root/etcd-v3.0.2-linux-amd64/Documentation/demo.md

 

cat >>/opt/etcd/ku_etcd.sh <<eof </eof<>

#!/bin/bash

 

etcd_data_dir=/var/lib/etcd/

mkdir -p ${etcd_data_dir}

 

cat </opt/kubernetes/cfg/etcd.conf

# [member]

ETCD_NAME=default

ETCD_DATA_DIR="${etcd_data_dir}/default.etcd"

ETCD_LISTEN_CLIENT_URLS=""

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.11:2379,http://192.168.1.11:4001"

 

EOF

 

3.1.3  開機啟動ETCD

cat </usr/lib/systemd/system/etcd.service

[Unit]

Description=Etcd Server

 

[Service]

ExecStart=/opt/etcd/bin/etcd \

         --name etcd-1 \

        --initial-advertise-peer-urls http://192.168.1.11:2380 --listen-peer-urls http://192.168.1.11:2380 \

        --advertise-client-urls http://192.168.1.11:2379 --listen-client-urls http://192.168.1.11:2379 \

        --initial-cluster etcd-1=http://192.168.1.11:2380 \

        --initial-cluster-state new --initial-cluster-token token-01

 

[Install]

WantedBy=multi-user.target

EOF

 

systemctl daemon-reload

systemctl enable etcd

systemctl start etcd

 

 

3.1.4  檢查ETCD

etcdctl --endpoints=192.168.1.11:2379 member list

 

etcdctl member list

etcdctl mk key value

etcdctl get key

在其他主機上,驗證遠端連線的正確性,是否可以正確設定和獲取

etcdctl -endpoints http://192.168.1.11:4001 get key

etcdctl -endpoints http://192.168.1.11:4001 mk key2 value2

etcdctl -endpoints http://192.168.1.11:4001 get key2

 

 

#################   kubernetes   ##############################################

 

wget

 

mkdir -p /opt/kubernetes/bin

tar xf kubernetes.tar.gz

cd /root/kubernetes/server/

tar xf kubernetes-server-linux-amd64.tar.gz

 

Master:

cp kubernetes/server/bin/kube* /opt/kubernetes/bin/

 

minion:

kubeletkube-proxy則複製到minion1minion2

cd /root/kubernetes/server/

scp kubelet kube-proxy* 192.168.1.12:/opt/kubernetes/bin/

scp kubelet kube-proxy* 192.168.1.13:/opt/kubernetes/bin/

 

3.1.5  配置環境變數

Master配置環境變數:

PATH=$PATH:$HOME/bin:/opt/etcd/bin/:/opt/kubernetes/bin

 

minion配置環境變數:

PATH=$PATH:$HOME/bin:/opt/kubernetes/bin

 

驗證版本資訊:

/opt/kubernetes/bin/kubectl version

 

 

4       下載KUBERNETES

4.1   下載並解壓

wget

mkdir -p /opt/kubernetes/bin

tar xf kubernetes.tar.gz

cd /root/kubernetes/server/

tar xf kubernetes-server-linux-amd64.tar.gz

4.2   Master節點

複製相關程式到Master節點

cp kubernetes/server/bin/kube* /opt/kubernetes/bin/

4.3   NODE節點

kubeletkube-proxy則複製到minion1minion2

cd /root/kubernetes/server/

scp kubelet kube-proxy* 192.168.1.12:/opt/kubernetes/bin/

scp kubelet kube-proxy* 192.168.1.13:/opt/kubernetes/bin/

5       安裝KUBERNETESMASTER節點

5.1   安裝APISERVER

解壓目錄有官方參考安裝指令碼:

/root/kubernetes/cluster/centos/master/scripts/apiserver.sh

 

執行apiserver.sh指令碼

cd /root/kubernetes/cluster/centos/master/scripts

sh apiserver.sh  “192.168.1.11”  "" "10.10.10.0/24" 

 

5.2   安裝controller-manager

解壓目錄有官方參考安裝指令碼:

/root/kubernetes/cluster/centos/master/scripts/controller-manager.sh

 

執行controller-manager.sh腳步

cd /root/kubernetes/cluster/centos/master/scripts/

sh controller-manager.sh  192.168.8.11

5.3   安裝scheduler

解壓目錄有官方參考安裝指令碼:

/root/kubernetes/cluster/centos/master/scripts/ scheduler.sh

 

cd /root/kubernetes/cluster/centos/master/scripts/

sh scheduler.sh 192.168.1.11

 

6       安裝配置KUBERNETESNODE節點

6.1   FLANNEL安裝與配置

6.1.1  FLANNEL安裝

wget -c

 

tar zxvf flannel-0.5.5-linux-amd64.tar.gz

cd flannel-0.5.5-linux-amd64

cp  flannel   /opt/kubernetes/bin/

 

6.1.2  FLANNEL配置

解壓目錄有官方參考安裝指令碼:

/root/kubernetes/cluster/centos/node/scripts/flannel.sh

Flannel.sh使用到了mk-docker-opts.shremove-docker0.sh這兩個檔案在

/root/kubernetes/cluster/centos/node/bin/mk-docker-opts.sh

/root/kubernetes/cluster/centos/node/bin/remove-docker0.sh

 

複製到/opt/kubernetes/bin/目錄

cp  /root/kubernetes/cluster/centos/node/bin/*  /opt/kubernetes/bin/

快速配置flannel

 sh flannel.sh "http://192.168.1.11:4001"  “172.16.18.0/16”

 

6.2   配置kubelet

解壓目錄有官方參考安裝指令碼:

/root/kubernetes/cluster/centos/node/scripts/kubelet.sh

 

cd /root/kubernetes/cluster/centos/node/scripts

 

NODE1

sh kubelet.sh  “192.168.1.11” “192.168.1.12”

NODE2

sh kubelet.sh  “192.168.1.11” “192.168.1.13”

 

說明:192.168.1.11APISERVER的地址,

           192.168.1.12NODEIP地址

6.3   配置proxy

解壓目錄有官方參考安裝指令碼:

/root/kubernetes/cluster/centos/node/scripts/proxy.sh

 

cd /root/kubernetes/cluster/centos/node/scripts

 

NODE1

sh proxy.sh  “192.168.1.11” “192.168.1.12”

NODE2

sh proxy.sh  “192.168.1.11” “192.168.1.13”

 

說明:192.168.1.11APISERVER的地址,

           192.168.1.12NODEIP地址

 

6.4   配置DOCKER

解壓目錄有官方參考安裝指令碼:

/root/kubernetes/cluster/centos/node/scripts/docker.sh

 

cd /root/kubernetes/cluster/centos/node/scripts

 

NODE節點治:

sh docker.sh 

 

至此,kubernetes已安裝完畢

 

7       使用KUBERNETES

kubernetes

Master:

/opt/kubernetes/bin/kubectl -s 192.168.1.11:8080 create -f tomcat.yaml

 

檢視:

檢視所有NODE是否正常

kubectl -s 192.168.1.11:8080 get no

kubectl -s 192.168.1.11:8080 describe po tomcat

 

 

檢視podreplication controllerserviceendpoint

kubectl -s 192.168.1.11:8080 get po

kubectl -s 192.168.1.11:8080 get rc

kubectl -s 192.168.1.11:8080 get svc

kubectl -s 192.168.1.11:8080 get ep

 

kubectl get rc,pods

kubectl describe pod  tomcat111

 

kubectl logs tomcat111-3506222467-pnx1l

 

刪除:

kubectl -s 192.168.1.11:8080 delete -f tomcat.yaml

 

kubectl get po                          # 檢視目前所有的pod

kubectl get rs                          # 檢視目前所有的replica set

kubectl get deployment                  # 檢視目前所有的deployment

kubectl describe po my-nginx            # 檢視my-nginx pod的詳細狀態

kubectl describe rs my-nginx            # 檢視my-nginx replica set的詳細狀態

kubectl describe deployment my-nginx    # 檢視my-nginx deployment的詳細狀態

 

 

kubectl run foo2 --image=hello-world

kubectl  delete deployment foo2

 

 

 

kubernetes的監控採用了cAdvisor元件。因為kubernetes中記錄了容器的資訊(但是沒有記錄容器-網路卡的對映關係),所以執行在節點上的cAdvisor不需要透過docker stats去獲取容器的cpu和記憶體使用資料。

而網路IO資料呢?

我們知道k8s部署執行一個容器是會先生成一個pause容器。

是的,網路IO都記錄在pause容器中。這裡大家可以在自己的k8s環境中驗證。

所以只要我們獲取某容器對應的pause容器的containerID,我們就可以用如上的方式去抓到網路IO

因為cAdvisor並不是為k8s專門設計的,不會特地在獲取網路IO時去遍歷查詢容器對應的pause容器。所以當前的cAdvisor沒有辦法獲取容器的網路IO

所以如果在使用k8s叢集,想要加入網路IO監控功能的時候,可以從k8s自帶的cAdvisor入手。

 

問題(1) kubectl get rc,pods 一直處於“ ContainerCreating ”狀態

kubectl get rc,pods

原因:k8s預設從gcr.io/google_containers拉去映象,國內網路無法訪問。

給每個minion下載Google pause映象。之後的工作會用到gcr.io/google_containers/pause映象,

國內使用者由於GFW問題總是會出錯,所以我們先從docker.io下載pause映象,並設定tag

minion節點:

 

docker pull kubernetes/pause

docker tag kubernetes/pause gcr.io/google_containers/pause-amd64:3.0

 

 

8       使用kubernetes pod複製器

##########################  nginx pod複製器  ######################

cat > nginx-rc.yaml <<eof </eof<>

apiVersion: v1

kind: ReplicationController

metadata:

  name: nginx-controller

spec:

  replicas: 2

  selector:

    name: nginx

  template:

    metadata:

      labels:

        name: nginx

    spec:

      containers:

        - name: nginx

          image: nginx

          ports:

            - containerPort: 80

EOF

 

我們定義了一個nginx pod複製器,複製份數為2,我們使用nginx docker映象。

執行下面的操作建立nginx pod複製器:

 

kubectl  create -f nginx-rc.yaml

kubectl  get service

 

##########################  Service   ##########################

ServicetypeClusterIPNodePort之分,預設是ClusterIP,這種型別的Service只能在叢集內部訪問。下表是本文用的配置檔案:

cat >nginx-service-clusterip.yaml <<eof </eof<>

apiVersion: v1

kind: Service

metadata:

  name: nginx-service-clusterip

spec:

  ports:

    - port: 8001

      targetPort: 80

      protocol: TCP

  selector:

    name: nginx

EOF

 

kubectl create -f ./nginx-service-clusterip.yaml  services/nginx-service

kubectl   get service

kubectl  describe service nginx-service-clusterip

 

###############################   #######################

部署外部可訪問的nginx service

 

下面我們建立NodePort型別的Service,這種型別的Service在叢集外部是可以訪問。下表是本文用的配置檔案:

cat >nginx-service-nodeport.yaml<<eof </eof<>

apiVersion: v1

kind: Service

metadata:

  name: nginx-service-nodeport

spec:

  ports:

    - port: 8000

      targetPort: 80

      protocol: TCP

  type: NodePort

  selector:

    name: nginx

 

EOF

 

kubectl create -f ./nginx-service-nodeport.yaml

kubectl   get service

kubectl  describe service nginx-service-nodeport

9       SKYDNS

9.1   SKYDNS簡介

SKYDNS 已經被淘汰,建議用KUBE-DNS,請參考下一章節


DNS Server包含3部分:

- skyDNS: 提供DNS解析服務

- etcd:用於skyDNS的儲存

- kube2sky:連線KubernetesskyDNS

 

注意:skydns服務使用的clusterIP需要我們指定一個固定的IP地址,每個NodeKubelet程式都將使用這個IP地址,不能透過Kubernetes自動分配。

另外,這個IP地址需要在kube-apiserver啟動引數–service-cluster-ip-range指定的IP地址範圍內。

9.2   SKYDNS安裝

(本章節的操作在APISERVER節點下)

 

可以參考這篇文章配置SKYDNS,也可以使用DOCKER容器的方式部署SKYDNS

(kube2sky的地址已經不存在,我找了很久也沒找到)


本文使用DOCKER容器的方式部署SKYDNS

Kubernetes.tar.gz裡有建立SKYDNSYAML檔案,路徑如下:

cp  /root/kubernetes/docs/getting-started-guides/coreos/azure/addons/skydns-rc.yaml  /root/script/

cp  /root/kubernetes/docs/getting-started-guides/coreos/azure/addons/skydns-svc.yaml  /root/script/

 

cd /root/script/

修改skydns-rc.yaml

kube_master_url=http://192.168.1.11:8080

domain=kube.local

 

kube_master_urlapiserverIP

domainDNS的域名

 

DNS服務中設定的域名。

修改skydns-rc.yaml

clusterIP: 10.10.10.100

DNSIP

9.3   NODE節點下載相關映象

在所有的NODE節點下載相關映象(需翻牆下載)

docker pull gcr.io/google_containers/etcd:2.0.9

docker pull gcr.io/google_containers/kube2sky:1.11

docker pull gcr.io/google_containers/skydns:2015-03-11-001

docker pull gcr.io/google_containers/exechealthz:1.0

docker pull gcr.io/google_containers/pause-amd64

備註:gcr.io/google_containers/pause-amd64kubernetes的基礎映象,必須要下載

 

9.4   建立DNSPODSERVICE

(在APISERVER伺服器上執行)

建立DNS

kubectl  create –f skydns-rc.yaml

kubectl  create –f kydns-svc.yaml

 

檢視狀態

kubectl get rc --namespace=kube-system

kubectl get pods --namespace=kube-system

kubectl get services --namespace=kube-system

9.5   NODE節點修改Kubelet服務的啟動引數

修改每臺Node上修改Kubelet服務的啟動引數:

--cluster_dns=10.10.10.100,為DNS服務的ClusterIP地址;

--cluster_domain=cluster.local,為DNS服務中設定的域名。

然後重啟Kubelet服務。

systemctl daemon-reload

systemctl restart kubelet.service

 

 

下載測試DNSbusybox映象

docker pull busybox

測試

kubectl exec busybox -- nslookup kube-dns.kube-system

如果解析不成功,可以看看etcd是否有這個DNSKEY

kubectl exec busybox --namespace=default -- nslookup kube-local.kube-system

docker exec 725470b1d3f5 etcdctl ls /

 

10             KUBE-DNS

Kubernetes V1.3.x新增了kube-dns來替換skydns,部署相當簡單。

master主機部署kube-dns步驟:

10.1     新建kube-dns配置檔案

# vi /etc/kubernetes/cfg/kube-dns

# kubernetes kube-dns config

KUBE_DNS_PORT="--dns-port=53"

KUBE_DNS_DOMAIN="--domain=bstk8s.com"

KUBE_DNS_MASTER=--kube-master-url="http://192.168.1.11:8080"

KUBE_DNS_ARGS=""

 

10.2     新建kube-dns.service配置檔案

# vi /usr/lib/systemd/system/kube-dns.service

[Unit]

Description=Kubernetes Kube-dns Server

Documentation=

After=kube-apiserver.service

Requires=kube-apiserver.service

 

[Service]

WorkingDirectory=/var/lib/kube-dns

EnvironmentFile=-/etc/kubernetes/cfg/kube-dns

ExecStart=/opt/kubernetes/bin/kube-dns \

            $KUBE_DNS_PORT \

            $KUBE_DNS_DOMAIN \

            $KUBE_DNS_MASTER \

            $KUBE_DNS_ARGS

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

 

建立目錄

mkdir -p /var/lib/kube-dns

配置service自動啟動

systemctl enable kube-dns

systemctl restart kube-dns

systemctl status kube-dns

 

 

10.3      所有Node節點主機修改kubelet檔案

# vi /opt/kubernetes/cfg/kubelet

....

# Add your own!

KUBELET_ARGS="--cluster-dns=192.168.1.11 \

              --cluster-domain=bstk8s.com"

 

10.4      修改resolv.conf,新增域名解析伺服器地址

[root@k8s-master ~]# vi /etc/resolv.conf

# Generated by NetworkManager

search default.svc.bstk8s.com svc.bstk8s.com bstk8s.com

nameserver 192.168.1.11

 

nameserver 8.8.8.8

nameserver 114.114.114.114

 

10.5      DNS測試

檢視所有service

kubectl get svc --all-namespaces

 

kubectl exec busybox -- nslookup  kube-system

如果解析不成功,可以看看etcd是否有這個DNSKEY

ETCD所在主機上:

etcdctl  ls /

11             cAdvisor

Google的 cAdvisor 是另一個知名的開源容器監控工具。

    只需在宿主機上部署cAdvisor容器,使用者就可透過Web介面或REST服務訪問當前節點和容器的效能資料(CPU、記憶體、網路、磁碟、檔案系統等等),非常詳細。

    預設cAdvisor是將資料快取在記憶體中,資料展示能力有限;它也提供不同的持久化儲存後端支援,可以將監控資料儲存、彙總到Google BigQuery、InfluxDB或者Redis之上。

    新的Kubernetes版本里,cadvior功能已經被整合到了kubelet元件中

    需要注意的是,cadvisor的web介面,只能看到單前物理機上容器的資訊,其他機器是需要訪問對應ip的url,數量少時,很有效果,當數量多時,比較麻煩,所以需要把cadvisor的資料進行彙總、展示,就看“cadvisor+influxdb+grafana”


Cadvisor,只需要 在kubelet命令中,啟用Cadvisor,和配置相關資訊 ,即可

 

1)在/opt/kubernetes/cfg/kubelet 加入如下 引數:

CADVISOR=' --cadvisor-port=4194  --storage-driver-db="cadvisor"  --storage-driver-host="localhost:8086"'

2)修改/usr/lib/systemd/system/kubelet.service

ExecStart=xxx 後面加上${CADVISOR}


3)重啟kubelet

systemctl daemon-reload

systemctl restart kubelet.service

 

4)訪問http://192.168.1.12:4194/

 

12             K8S-WEB工具kubernetes-dashboard    

kubernetes-dashboard  是一個WEB工具,可以對kubernates資源(PODSERVICERC)進行增刪改查:

    增:新建(分填寫的和上傳jsonyaml的),上傳的方式,等同於kubectl create -f

    刪:刪除副本(replicationcontrollers

    改:修改副本數

    查:查詢相關資訊,同kubectl get命令

 

MASTER要安裝flannel,請引數“FLANNEL安裝與配置章節

 

kubernetes.tar.gz解壓目錄的如下路徑複製YAML檔案:

/root/kubernetes/cluster/addons/dashboard/dashboard-controller.yaml

/root/kubernetes/cluster/addons/dashboard/dashboard-service.yaml

 

修改dashboard-controller.yaml ,增加兩行

        ports:

        - containerPort: 9090

        args: (加上這兩行)

        -  --apiserver-host=http://192.168.1.11:8080(加上這兩行)

 

kubectl create -f dashboard-controller.yaml

kubectl create -f dashboard-service.yaml

 

http://192.168.1.11:8080/ui 192.168.1.11Master節點)

 

13             叢集監控Heapster+Influxdb+grafana

Heapster當前版本需使用https安全方式與master連線,

 

13.1      master主機建立證照並應用

mkdir key

cd key/

openssl genrsa -out ca.key 2048

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

openssl genrsa -out server.key 2048

more /etc/hostname

docker1

 

openssl req -new -key server.key -subj "/CN=docker1" -out server.csr

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

[root@k8s_master key]# ll

total 24

-rw-r--r-- 1 root root 1107 Apr 17 17:25 ca.crt

-rw-r--r-- 1 root root 1679 Apr 17 17:23 ca.key

-rw-r--r-- 1 root root   17 Apr 17 17:29 ca.srl

-rw-r--r-- 1 root root  985 Apr 17 17:29 server.crt

-rw-r--r-- 1 root root  891 Apr 17 17:27 server.csr

-rw-r--r-- 1 root root 1675 Apr 17 17:26 server.key

生成6個檔案,複製至/var/run/kubernetes/

[root@k8s_master key]# cp *.* /var/run/kubernetes/

[root@k8s_master key]# ll /var/run/kubernetes/

total 32

-rw-r--r-- 1 kube kube 1200 Apr 17 11:43 apiserver.crt

-rw------- 1 kube kube 1675 Apr 17 11:43 apiserver.key

-rw-r--r-- 1 root root 1107 Apr 17 17:39 ca.crt

-rw-r--r-- 1 root root 1679 Apr 17 17:39 ca.key

-rw-r--r-- 1 root root   17 Apr 17 17:39 ca.srl

-rw-r--r-- 1 root root  985 Apr 17 17:39 server.crt

-rw-r--r-- 1 root root  891 Apr 17 17:39 server.csr

-rw-r--r-- 1 root root 1675 Apr 17 17:39 server.key

 

修改apiserer的配置檔案

vi apiserver

.....

# default admission control policies

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

 

# Add your own!

KUBE_API_ARGS="--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"

說明:

--client-ca-file:根證照檔案

--tls-cert-file:服務端證照檔案

--tls-private-key-file:服務端私鑰檔案

 

重啟apiserver服務

[root@k8s_master kubernetes]# systemctl restart kube-apiserver

[root@k8s_master kubernetes]# systemctl status kube-apiserver

 

修改controller-manager服務引數

vi controller-manager

# Add your own!

KUBE_CONTROLLER_MANAGER_ARGS="--service-account-private-key-file=/var/run/kubernetes/apiserver.key \

                              --root-ca-file=/var/run/kubernetes/ca.crt"

 

重啟controller-manager服務

systemctl restart kube-controller-manager

systemctl status kube-controller-manager

 

kubectl get serviceaccounts --all-namespaces

kubectl get secrets --all-namespaces

kubectl describe secret default-token-2d412

檢視容器證照:

kubectl exec -ti frontend-z7021  ls /var/run/secrets/kubernetes.io/serviceaccount

 

13.2      部署Influxdb+grafana

我們使用已搭建好的環境(192.168.1.11

登陸192.168.1.11,新建資料庫k8s

 

實施步驟:

13.2.1              部署influxdb

cat <<eof |="" sudo="" tee="" etc="" yum.repos.d="" influxdb.repo

[influxdb]

name = InfluxDB Repository - RHEL \$releasever

baseurl = \$releasever/\$basearch/stable

enabled = 1

gpgcheck = 1

gpgkey =

EOF

 

yum install -y influxdb

systemctl enable influxdb

systemctl start influxdb

systemctl status influxdb

 

檢視配置檔案:

rpm -qc influxdb

vi /etc/influxdb/influxdb.conf

 hostname = "192.168.1.11"

檢視influxdb啟動埠(8091,8083,8086,8088

netstat -nltp

 

進入influx命令列

influx

SHOW DATABASES

CREATE DATABASE k8sdb

use k8sdb

CREATE USER "root" WITH PASSWORD 'root123' WITH ALL PRIVILEGES

show user

INSERT cpu,host=test,region=us_west value=0.64

SELECT * FROM /.*/ LIMIT 1

13.2.2              部署grafana

cd /usr/src

grafana-2.6.0 不支援influx-0.13,需要 grafana-3.0以上

Because of the changes to the SHOW SERIES and SHOW TAG VALUES formats in InfluxDB 0.11, InfluxDB 0.13 will not work with the Query Editor in Grafana 2.6.

yum install

檢視配置檔案

rpm -qc grafana

systemctl enable grafana-server

systemctl start grafana-server

systemctl status grafana-server

 

檢視啟動埠(3000

netstat -nltp

 

瀏覽器開啟,

http://192.168.1.11:3000

預設admin/admin

新增data source:填寫influxdb版本,ip,埠,使用者名稱密碼;測試資料庫名,使用者名稱密碼;並進行連線測試。

參考文件:

--------------------

Name :k8sdb    Default 

Type :InfluxDB 0.9x

 

Http settings

Url :http://192.168.1.11:8086

Access  :proxy

Http Auth: Basic Auth

User :admin

Password: admin

 

InfluxDB Details

Database :k8s

User :root

Password :root

 

新建bashborad,並儲存(根據過濾條件可以查到之前新增的一套資料)

定義要監控的資訊,首先點選grafanaUI介面的左邊的Dashboards按鈕,

然後點選New按鈕,此時將會在Dashboards的旁邊出現一個綠色圖示,

移動滑鼠到該圖示上,將會有一系列表展現出來,這時選擇Add Panel然後在選擇Graph

Dashboards-->new-->add panel -->graph --->panel data source --> select

 

13.3      配置heapster容器

vi heapster-controller.yaml

apiVersion: v1

kind: ReplicationController

metadata:

  name: heapster

  labels:

    name: heapster

spec:

  replicas: 1

  selector:

    name: heapster

  template:

    metadata:

      labels:

        name: heapster

    spec:

      containers:

      - name: heapster

        image: gcr.io/google_containers/heapster:v1.1.0

        command:

          - /heapster

          - --source=kubernetes:http://192.168.1.11:8080?inClusterConfig=false&kubeletHttps=true&kubeletPort=10250&useServiceAccount=true&auth=

          - --sink=influxdb:http://192.168.1.11:8086

 

建立pod

kubectl create -f heapster-controller.yaml

kubectl get pods

kubectl logs heapster-g5ik1

 

 

14             附錄1

14.1      Flannel 引數(所有節點)

/opt/kubernetes/bin/flanneld --ip-masq -etcd-endpoints=http://192.168.1.11:4001 -etcd-prefix=/coreos.com/network

14.2     kube-apiserve引數(MASTER節點)

/opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=http://192.168.1.11:4001 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --kubelet-port=10250 --advertise-address=192.168.1.11 --allow-privileged=false --service-cluster-ip-range=10.10.10.0/24 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota     --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

14.3      kube-controller-manager引數(MASTER節點)

/opt/kubernetes/bin/kube-controller-manager --logtostderr=true --v=4 --master=192.168.1.11:8080  --service-account-private-key-file=/var/run/kubernetes/apiserver.key

14.4      kube-scheduler 引數(MASTER節點)

/opt/kubernetes/bin/kube-scheduler --logtostderr=true --v=4 --master=192.168.1.11:8080 --log-dir=/tmp/kube-scheduler.log

14.5      kube-dns引數(MASTER節點)

/opt/kubernetes/bin/kube-dns --dns-port=53 --domain=bstk8s.com --kube-master-url=http://192.168.1.11:8080

14.6      kube-proxy 引數(NODE節點)

/opt/kubernetes/bin/kube-proxy --logtostderr=true --v=4 --hostname-override=192.168.1.12 --master=http://192.168.1.11:8080

14.7      Kubelet 引數(NODE節點)

/opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --address=192.168.1.12 --port=10250 --hostname-override=192.168.1.12 --api-servers=192.168.1.11:8080 --allow-privileged=false  --cluster_dns=192.168.1.11 --cluster_domain=bstk8s.com  --cadvisor-port=4194  --storage-driver-db="cadvisor"  --storage-driver-host="localhost:8086"

 

 

15             附錄2

相關部署指令碼和YAML檔案

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10995764/viewspace-2124022/,如需轉載,請註明出處,否則將追究法律責任。

相關文章