kubernetes+docker+dashboard安裝部署詳細步驟
阿新 • • 發佈:2018-09-28
fire col owin selinux 打通 dct des 主機名 -c
對docker和kubernetes都不熟悉,搜了很多指導,在kubernetes集群中安裝dashboard的時候總是會遇到各種問題,花了兩天時間試了很多方法,終於安裝成功,主體步驟來自https://blog.csdn.net/chenyufeng1991/article/details/79251498,補全安裝過程中遇到的問題及解決方法。
實驗環境:
1.OS:Centos7.5
每個操作系統設置一個主機IP
2.使用的軟件包
master:docker/kubernetes-master/etcd/flannel
nodes:docker/kubernetes-node/flannel
3.軟件包說明
kubernetes-master:Kubernetes服務端
kubernetes-node:Kubernetes客戶端
etcd:服務發現的鍵值存儲(可以理解為中間件,flannel服務通過它記錄分配給各pod的地址段,每次分配前會在etcd中查詢,從而不會重復分配)
flannel:打通多臺服務器上的docker容器之間的網路互通
前提條件:
1.master和node修改SELINUX配置文件,SELINUX=disabled,重啟操作系統
2.master和node執行systemctl stop firewalld和systemctl disable firewalld關閉防火墻,有安全需求的,可以根據需要啟動防火墻,放開相應端口
3.master和node修改主機名,可以使用hostnamectl命令直接修改,也可以修改/etc/hostname文件,將主機名與IP地址對應關系寫入/etc/hosts文件
4.開啟路由轉發功能,在master和node的/etc/sysctl.conf中添加net.ipv4.ip_forward = 1 執行sysctl -p執行該文件
安裝步驟:
1.master安裝配置
yum install -y kubernetes-master etcd flannel docker
此處如果有低版本kubectl等工具會報錯,使用rpm -e卸載所有依賴,再次執行此命令即可
etcd安裝完成後配置
vi /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379" ###此處localhost修改為0.0.0.0
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379" ###此處localhost修改為主機IP地址,如果多個etcd構成集群,直接在後面加url
完成以後配置後,啟動etcd,加入自啟動
systemctl start etcd
systemctl enable etcd
配置Kubernetes,進入/etc/kubernetes目錄:
vi apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" ###apiserver服務綁定的地址(個人理解為apiserver監聽地址)
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.149.134:2379" ###url裏面的IP地址修改為etcd配置文件中設置的主機IP地址
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=172.17.0.0/16" ###Kubernetes可以分配的IP範圍,Kubernetes啟動的每一個pod以及service都會分配一個IP地址,將會從這個範圍分配。是Services管理的集群IP地址範圍。後面etcd設置存儲地址段的目錄時,要與該地址段保持一致。
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" ###是因為安裝kubernetes而修改的配置
vi config
KUBE_MASTER="--master=http://192.168.149.134:8080" ###此處url中的IP地址修改為master主機IP地址
2.node配置
yum install -y kubernetes-node flannel docker
配置kubernetes,進入/etc/kubernetes目錄:
vi config
KUBE_MASTER="--master=http://192.168.149.134:8080" ###此處url中的IP地址修改為master主機IP地址
vi kubelet
KUBELET_ADDRESS="--address=0.0.0.0" ###kubelet啟動後綁定的地址
KUBELET_HOSTNAME="--hostname-override=node" ###此處為master執行get nodes時顯示的名稱,填可以解析的主機名或者IP地址,不能隨意起
KUBELET_API_SERVER="--api-servers=http://192.168.149.134:8080" ###此處IP地址為master的主機IP地址
3.配置flannel,master及node節點上flannel的配置都要一樣
master及node節點,進入/etc/sysconfig目錄
vi flanneld
FLANNEL_ETCD_ENDPOINTS="http://http://192.168.149.134:2379" ###此處IP地址為etcd配置文件中設置的主機IP地址
FLANNEL_ETCD_PREFIX="/kube/network" ###下面etcd執行命令時使用該目錄
然後在master節點上執行以下命令:
etcdctl mkdir /kube/network
etcdctl mk /kube/network/config ‘{"Network":"172.17.0.0/16"}‘ ###此處網段要與前面apiserver裏面配置的參數一致
4.分別在master、nodes上啟動docker、etcd、flanneld並加入自啟動
master:
systemctl start docker etcd flanneld
systemctl enable docker etcd flanneld
node:
systemctl start docker flanneld
systemctl enable docker flanneld
5.啟動服務
啟動master上的k8s服務,先啟動apiserver
systemctl start kube-apiserver kube-controller-manager kube-scheduler
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
啟動nodes上的k8s服務
systemctl start kube-proxy kubelet
systemctl enable kube-proxy kubelet
6.驗證
訪問http://kube-apiserver:port
http://192.168.149.134:8080/ 查看所有請求url。
http://192.168.149.134:8080/healthz/ping 查看健康狀況。
在master上查看一些服務是否成功開啟 獲取k8s客戶端 kubectl get nodes ###可以獲取到node 獲取k8s命名空間 kubectl get namespace ###要有kube-system 7.開始安裝dashboard(坑比較多的地方) master開始創建dashboard ui,在該步驟之前要先有kube-system命名空間 在master上拉取以下代碼:wget http://docs.minunix.com/docker/kubernetes-dashboard.yaml ###wget下載不下來可以用curl -O 這個url下載下來,將裏面的- --apiserver-host=http://192.168.149.134:8080 IP地址替換成自己的master主機IP地址,通過master的apiserver來訪問運行在node容器中的dashboard
如果下載不下來,可以直接創建kubernetes-dashboard.yaml文件,將下面內容復制到該文件中保存即可
kind: Deployment apiVersion: extensions/v1beta1 metadata: labels: app: kubernetes-dashboard version: v1.1.1 name: kubernetes-dashboard namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kubernetes-dashboard template: metadata: labels: app: kubernetes-dashboard spec: containers: - name: kubernetes-dashboard image: daocloud.io/minunix/kubernetes-dashboard-amd64:v1.1.1 imagePullPolicy: Always ports: - containerPort: 9090 protocol: TCP args: # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. - --apiserver-host=http://192.168.3.7:8080 ## 請修改為自己的kebu-apiserver livenessProbe: httpGet: path: / port: 9090 initialDelaySeconds: 30 timeoutSeconds: 30 --- kind: Service apiVersion: v1 metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: type: NodePort ports: - port: 80 targetPort: 9090 selector: app: kubernetes-dashboard
如果要通過node的IP地址直接訪問dashboard,需要在ports裏面添加nodeport
最後的ports部分替換為:
spec:
type: NodePort
ports:
-
port: 80
targetPort: 9090
nodePort: 30090 ###該端口自己定義,有取值範圍
selector:
app: kubernetes-dashboard根據以上yaml創建pods:
kubectl create -f kubernetes-dashboard.yaml
如果報錯,根據提示信息進行處理,如果修改yaml後重新執行上面命令提示已存在,可以執行以下刪除命令後再執行創建命令
kubectl delete -f kubernetes-dashboard.yaml
8.查看是否創建成功:
kubectl get pods --namespace=kube-system ###--namespace是指定在哪個命名空間中的pod,不加的話在default中查找
容器status不為running說明容器狀態不正常 使用kubectl describe pods kubernetes-dashboard-2496492025-rwczb --namespace=kube-system命令查看這個容器創建過程中出現的問題,kubernetes-dashboard-2496492025-rwczb是上面命令查詢結果中pod的名稱 根據提示信息發現是鏡像拉取失敗,細節是找不到文件或者文件夾,查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt 是一個軟鏈接,但是鏈接過去後並沒有真實的/etc/rhsm,進行如下操作: 1).yum安裝 yum install *rhsm* 安裝完成後查看上面的軟連接是否有真實的連接文件,如果有,問題解決,手動拉取鏡像文件 docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest 2).如果上面的方法無法解決軟連接問題,執行下面步驟 curl -O http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm 執行以下命令 rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem 然後再執行docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest 手動拉取鏡像 再次執行get pods命令,查看pod狀態,發現status變為running,說明應用已正常運行。 9.訪問dashboard 可以通過三種方式訪問dashboard 1).kubernetes-dashboard 服務暴露了 NodePort,可以使用 http://NodeIP:nodePort 地址訪問 dashboard;
2).通過 kube-apiserver 訪問 dashboard,使用http://masterip:8080 地址訪問
3).通過 kubectl proxy 訪問 dashboard:10.常用日誌查看命令: journalctl -xue | kubelet 根據輸出解決安裝的問題
kubectl describe pods <podName> -n=kube-system 查看內部pod啟動錯誤的原因
kubectl logs -f pods <podName> -n=kube-system 查看容器內部的日誌
kubernetes+docker+dashboard安裝部署詳細步驟