摘要:使用安裝安全高可用集群安裝包地址如非高可用安裝請(qǐng)忽略此教程,直接看產(chǎn)品頁(yè)的三步安裝。
使用kubeadm安裝安全高可用kubernetes集群
安裝包地址 如非高可用安裝請(qǐng)忽略此教程,直接看產(chǎn)品頁(yè)的三步安裝。
單個(gè)master流程: 單master視頻教程
解壓后在master 上 cd shell && sh init.sh ,然后sh master.sh(注意因?yàn)槟_本用的相對(duì)路徑所以不再當(dāng)前目錄會(huì)找不到文件)
在node上 cd shell && sh init.sh 。然后在node上執(zhí)行master輸出的join命令即可
高可用如下提前準(zhǔn)備
假設(shè)構(gòu)建一個(gè)3master+2node的k8s集群,需要5臺(tái)節(jié)點(diǎn)共同的條件如下:
(yum install -y docker是1.12.6版本需要改cg)
17.06安裝教程:
#0.刪除老舊的 $ yum remove -y docker* #如果默認(rèn)之前yum安裝的1.12版本,可以這樣刪沒(méi)裝可以跳過(guò)此步 #1.安裝需要的包 $ yum install -y yum-utils device-mapper-persistent-data lvm2 #2.添加源,不然默認(rèn)的找不到 $ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #3.根據(jù)實(shí)際查找當(dāng)前版本 (可選) $ yum list docker-ce --showduplicates | sort -r #4.如果確定了版本,直接安裝,如果要裝17。03直接修改下面數(shù)字即可 $ yum install docker-ce-17.06.1.ce # 主意版本填寫(xiě)包名的格式. #5.開(kāi)啟docker服務(wù),和開(kāi)機(jī)啟動(dòng) $ systemctl start docker && systemctl enable docker
建議二進(jìn)制方法提前部署好docker-compose,步驟參考后文
建議永久關(guān)閉selinux和swap以免后續(xù)問(wèn)題
建議停止并關(guān)閉firewalld/iptables等防火墻
新的節(jié)點(diǎn)啟動(dòng)后記得改網(wǎng)絡(luò)名 hostnamectl set-hostname masterX
節(jié)點(diǎn)之間要能互通內(nèi)網(wǎng)環(huán)境穩(wěn)定
安裝中出了問(wèn)題要看日志journalctl -n 10 ,運(yùn)行中的日志查看tail -f 10 /var/log/messages
系統(tǒng)架構(gòu)圖kubectl dashboard | V +------------------------+ join | LB 10.1.245.94 | <--- Nodes +------------------------+ | |--master1 manager1 schedule1 10.1.245.93 |--master2 manager2 schedule2 10.1.245.95 =============> etcd cluster http://10.1.245.93:2379,http://10.1.245.94:2379,http://10.1.245.95:2379 |--master3 manager3 schedule3 10.1.245.94安裝包介紹
解壓完之后看到如下目錄:
├── bin 所需要的k8s相關(guān)的bin文件 │ ├── kubeadm │ ├── kubectl │ └── kubelet ├── image 依賴(lài)的所有鏡像包 │ └── images.tar ├── out 所有的配置文件 │ ├── dashboard dashboard相關(guān)配置 │ │ ├── dashboard-admin.yaml │ │ └── kubernetes-dashboard.yaml │ ├── etcd etcd相關(guān)配置 │ │ ├── etcd-docker-compose-0.yml │ │ ├── etcd-docker-compose-1.yml │ │ └── etcd-docker-compose-2.yml │ ├── haproxy haproxy相關(guān)配置 │ │ └── haproxy.cfg │ ├── heapster heapster相關(guān)yaml配置 │ │ ├── influxdb │ │ │ ├── grafana.yaml │ │ │ ├── heapster.yaml │ │ │ └── influxdb.yaml │ │ └── rbac │ │ └── heapster-rbac.yaml │ ├── kube k8s自身配置 │ │ ├── 10-kubeadm.conf │ │ ├── config kubeadm配置 │ │ └── kubelet.service │ ├── kubeinit.json 忽略 │ └── net 網(wǎng)絡(luò)相關(guān)配置 │ ├── calico.yaml │ └── calicoctl.yaml └── shell 初始化腳本 ├── init.sh 初始化節(jié)點(diǎn),安裝bin文件,systemd配置等 └── master.sh 執(zhí)行kubeadm init和其它組件初始化節(jié)點(diǎn)
因?yàn)榻鈮汉蟀?然后scp -r xxx root@ip:/root 的方式分發(fā)解壓后的包到其他節(jié)點(diǎn)
集群中所有節(jié)點(diǎn)都需要執(zhí)行cd shell && sh init.sh (如果只跑單個(gè)master那么還需要執(zhí)行 sh master.sh ,多master勿跑 )
有以下需要注意的事項(xiàng):
修改init.sh腳本在后面添加,如果二進(jìn)制程序沒(méi)可執(zhí)行權(quán)限chmod +x /usr/bin/kube*
cgroups驅(qū)動(dòng)需要選擇docker17.0x版本,就不需要去調(diào)整了,如果是1.1x版本的docker需要手動(dòng)修改kubelet的啟動(dòng)文件里面的cgroups配置為systemd (修改位置/etc/systemd/system/kubelet.service.d) 與 docker info|grep Cg一致
提前修改默認(rèn)的init 或者手動(dòng)執(zhí)行sysctl -w net.ipv4.ip_forward=1 不然第七行報(bào)錯(cuò)
執(zhí)行完成后通過(guò)命令查看kubectl get pod -n kube-system ,狀態(tài)全為Running正常
起動(dòng)etcd集群etcd集群安裝使用docker-compose方式部署
A.使用docker-compose啟動(dòng),如果沒(méi)裝:
$ pip install docker-compose
B.使用二進(jìn)制包啟動(dòng)docker-compose(離線(xiàn)可選)
$ wget https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64 #官方推薦是用curl,不建議 $ mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose && chmod a+x /usr/local/bin/docker-compose #也有寫(xiě)+x的. #這樣就完成了,測(cè)試 $ docker-compose version #下面是正常輸出 docker-compose version 1.18.0, build 8dd22a9 docker-py version: 2.6.1 CPython version: 2.7.13 OpenSSL version: OpenSSL 1.0.1t 3 May 2016
在out/etcd目錄下有相關(guān)模板etcd-docker-compose-x.yam,啟動(dòng)多個(gè)節(jié)點(diǎn)時(shí)修改成自己的ip地址 其它兩個(gè)節(jié)點(diǎn)照抄,修改ip即可, image那行 應(yīng)改為 gcr.io/google_containers/etcd-amd64:3.1.11 ,實(shí)際就是版本號(hào)改一下即可。
#需要修改所有含有ip的地方,下面的9,10,11,12行改為當(dāng)前節(jié)點(diǎn)ip,15行三個(gè)ip順序改為etcd集群部署的三臺(tái)節(jié)點(diǎn)ip version: "2.1" services: etcd0: container_name: etcd_infra0 image: gcr.io/google_containers/etcd-amd64:3.0.17 #這里最后改為3.1.11 command: | etcd --name infra0 --initial-advertisie-peer-urls http://10.230.204.160:2380 --listen-peer-urls http://10.230.204.160:2380 --listen-client-urls http://10.230.204.160:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.230.204.160:2379 --data-dir /etcd-data.etcd --initial-cluster-token etcd-cluster-1 --initial-cluster infra0=http://10.230.204.160:2380,infra1=http://10.230.204.165:2380,infra2=http://10.230.204.151:2380 --initial-cluster-state new restart: always volumes: - /data/etcd-data.etcd:/etcd-data.etcd network_mode: "host"
三個(gè)節(jié)點(diǎn)分別啟動(dòng):
$ docker-compose -f out/etcd/etcd-docker-compose-x.yml up -d #正常輸出Creating etcd_infrax ... done x為每個(gè)etcd編號(hào)
檢查是不是安裝成功:
$ docker exec etcd_infra0 etcdctl member list #master1上可能運(yùn)行報(bào)錯(cuò)容易提示容器正在重啟。。原因暫時(shí)未知,其他master上可以 #成功應(yīng)該是類(lèi)似顯示 5ded6dd284b89d31: name=infra1 peerURLs=http://10.230.204.153:2380 clientURLs=http://10.230.204.153:2379 isLeader=true 6d4b5eee32c1497a: name=infra0 peerURLs=http://10.230.204.150:2380 clientURLs=http://10.230.204.150:2379 isLeader=false 729d9cd56debb1a1: name=infra2 peerURLs=http://10.230.204.154:2380 clientURLs=http://10.230.204.154:2379 isLeader=false #如果出現(xiàn)有peerURL不顯示說(shuō)明沒(méi)有成功,嘗試remove重新創(chuàng)建 $ docker-compose -f out/etcd/etcd-docker-compose-x.yml down -vkubeadm配置
修改配置 out/kube/config 文件
apiVersion: kubeadm.k8s.io/v1alpha1 kind: MasterConfiguration apiServerCertSANs: #此處填所有的masterip和lbip和其它你可能需要通過(guò)它訪問(wèn)apiserver的地址和域名或者主機(jī)名等,如阿里fip,證書(shū)中會(huì)允許這些ip - 172.31.244.231 - 172.31.244.232 - 172.31.244.233 - 172.31.244.234 - master1 - master2 - master3 - node1 - 47.75.1.72 etcd: endpoints: #這里填之前安裝的etcd集群地址列表,修改IP地址 - http://172.31.244.232:2379 - http://172.31.244.233:2379 - http://172.31.244.234:2379 apiServerExtraArgs: endpoint-reconciler-type: lease networking: podSubnet: 192.168.0.0/16 #不用改 kubernetesVersion: v1.9.2 #不用改 featureGates: #不用改 CoreDNS: true
然后執(zhí)行:
$ kubeadm init --config out/kube/config
把成功后的kubeadm join命令存在文件里,那東西不能丟了
啟動(dòng)calico等mkdir ~/.kube && cp /etc/kubernetes/admin.conf ~/.kube/config (如果已經(jīng)存在請(qǐng)校驗(yàn)一下是否相同,不確定建議刪掉重新cp過(guò)去)
修改calico配置,把etcd地址換成你安裝好的集群地址:
out/net/calico.yaml:
kind: ConfigMap apiVersion: v1 metadata: name: calico-config namespace: kube-system data: # The location of your etcd cluster. This uses the Service clusterIP # defined below. etcd_endpoints: "http://10.96.232.136:6666" # 這里改成etcd集群地址如 "http://172.31.244.232:2379,http://172.31.244.233:2379,http://172.31.244.234:2379"
$ kubectl apply -f out/net/calico.yaml $ kubectl apply -f out/heapster/influxdb $ kubectl apply -f out/heapster/rbac $ kubectl apply -f out/dashboard #上面命令可整合為 $ kubectl apply -f out/net/calico.yaml -f out/heapster/influxdb -f out/heapster/rbac -f out/dashboard
然后訪問(wèn)https://master1IP:32000端口即可,在chrome下無(wú)法進(jìn)入提示證書(shū)有誤,更換firefox可以,提示說(shuō)證書(shū)日期不對(duì)(待修復(fù))
啟動(dòng)多個(gè)master第一個(gè)master我們稱(chēng)之為master0 (假設(shè)其他master已經(jīng)init.sh過(guò)),現(xiàn)在把第一個(gè)master的/etc/kubernetes/pki目錄拷貝到別的master節(jié)點(diǎn)上
$ mkdir -p /etc/kubernetes $ scp -r /etc/kubernetes/pki [email protected]:/etc/kubernetes/pki
刪除pki目錄下的apiserver.crt 和 apiserver.key文件rm -rf apiserver.crt apiserver.key,注意如果不刪除會(huì)只能看到一個(gè)master,是不正常的。
同樣使用master0上的out/kube/config文件,復(fù)制內(nèi)容,拷貝到master1上,scp out/kube/config [email protected]:/root/ 執(zhí)行kubeadm init --config ~/config
master2節(jié)點(diǎn)同master1
啟動(dòng)loadbalance我比較推薦使用四層代理 HAproxy配置out/haproxy目錄:
vi out/haproxy/haproxy.cfg
global daemon log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 defaults log global retries 3 maxconn 2000 timeout connect 5s timeout client 50s timeout server 50s frontend k8s bind *:6444 mode tcp default_backend k8s-backend backend k8s-backend balance roundrobin mode tcp #下面三個(gè)ip替換成三個(gè)你自己master的地址 server k8s-1 10.1.245.93:6443 check server k8s-1 10.1.245.94:6443 check server k8s-2 10.1.245.95:6443 check
先 mkdir /etc/haproxy 然后把這個(gè)文件拷貝在cp out/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg
$ docker run --net=host -v /etc/haproxy:/usr/local/etc/haproxy --name ha -d haproxy:1.7修改kubeproxy配置
$ kubectl -n kube-system edit configmap kube-proxy
找到master地址,修改成LB地址,6444端口 (這里關(guān)鍵在于怎么知道LB的地址到底是哪一個(gè)呀?上面配置之后三個(gè)masterIP 輪詢(xún)并不知道哪個(gè)是LB地址)
#找到文件的這一塊,第七行server 有個(gè)ip地址 apiVersion: v1 kind: Config clusters: - cluster: certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt server: https://10.230.204.151:6443 #修改為 LoadBalanceIP:6444 name: default contexts: - context: cluster: default namespace: default user: default name: default current-context: default users: - name: default user: tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/tokenjoin node節(jié)點(diǎn)
還是在node節(jié)點(diǎn)執(zhí)行第一個(gè)master輸出的命令
$ kubeadm join --token修改node節(jié)點(diǎn)kubelet配置10.1.245.94:6443 --discovery-token-ca-cert-hash sha256:
vi /etc/kubernetes/kubelet.conf 同樣把地址修改成LB地址,如:10.1.245.94:6444 ,修改如下第五行(展示的例子已經(jīng)修改過(guò))
apiVersion: v1 clusters: - cluster: certificate-authority-data: xxxxxx #此處省略幾百字符 server: https://10.230.204.160:6444 #修改這里為L(zhǎng)B:6444,原本是另外的ip:6443 name: default-cluster contexts: - context: cluster: default-cluster namespace: default user: default-auth name: default-context current-context: default-contextkubectl配置
修改~/.kube/config文件,server的ip改成LB的ip 10.1.245.94:6444
或者通過(guò)命令修改:
$ kubectl config set-cluster kubernetes --server=https://47.52.227.242:6444 --kubeconfig=$HOME/.kube/config啟動(dòng)多DNS副本
$ kubectl edit deploy coredns -n kube-system
replicas: 3
[root@master1 ~]$ kubectl get pod -n kube-system -o wide|grep core coredns-65dcdb4cf-4j5s8 1/1 Running 0 39m 192.168.137.65 master1 coredns-65dcdb4cf-ngx4h 1/1 Running 0 38s 192.168.180.1 master2 coredns-65dcdb4cf-qbsr6 1/1 Running 0 38s 192.168.166.132 node1
這樣,啟動(dòng)了三個(gè)dns
驗(yàn)證與測(cè)試$ kubectl run test --image busybox sleep 10000 $ kubectl exec your-busybox-pod-name nslookup kubernetes
殺非LB的master,多次測(cè)試看創(chuàng)建pod與dns是否正常,還可以telnet 10.96.0.1 443 去驗(yàn)證clusterip是否正常
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28028.html
摘要:使用安裝安全高可用集群安裝包地址如非高可用安裝請(qǐng)忽略此教程,直接看產(chǎn)品頁(yè)的三步安裝。 使用kubeadm安裝安全高可用kubernetes集群 安裝包地址 如非高可用安裝請(qǐng)忽略此教程,直接看產(chǎn)品頁(yè)的三步安裝。 單個(gè)master流程: 單master視頻教程 解壓后在master 上 cd shell && sh init.sh ,然后sh master.sh(注意因?yàn)槟_本用的相...
摘要:使用安裝安全高可用集群安裝包地址如非高可用安裝請(qǐng)忽略此教程,直接看產(chǎn)品頁(yè)的三步安裝。 使用kubeadm安裝安全高可用kubernetes集群 安裝包地址 如非高可用安裝請(qǐng)忽略此教程,直接看產(chǎn)品頁(yè)的三步安裝。 單個(gè)master流程: 單master視頻教程 解壓后在master 上 cd shell && sh init.sh ,然后sh master.sh(注意因?yàn)槟_本用的相...
摘要:集群三步安裝概述本文教你如何用一條命令構(gòu)建高可用集群且不依賴(lài)和,也無(wú)需。通過(guò)內(nèi)核對(duì)進(jìn)行負(fù)載均衡,并且?guī)Ы】禉z測(cè)。當(dāng)然你也可以把用于一些其它場(chǎng)景,比如代理自己的服務(wù)等 kubernetes集群三步安裝 概述 本文教你如何用一條命令構(gòu)建k8s高可用集群且不依賴(lài)haproxy和keepalived,也無(wú)需ansible。通過(guò)內(nèi)核ipvs對(duì)apiserver進(jìn)行負(fù)載均衡,并且?guī)piserve...
摘要:這個(gè)用戶(hù)或者組用于后面的角色綁定使用生成的證書(shū)就會(huì)生成下面的文件校驗(yàn)證書(shū)生成文件已經(jīng)生成了,我們可以直接利用這個(gè)文件,省的自己再去配置集群參數(shù)設(shè)置客戶(hù)端認(rèn)證參數(shù)設(shè)置上下文參數(shù)設(shè)置莫認(rèn)上下文以上執(zhí)行一個(gè)步驟就可以看一下的變化。 kubernetes RBAC實(shí)戰(zhàn) 環(huán)境準(zhǔn)備 先用kubeadm安裝好kubernetes集群,kubernetes1.8.2安裝包 | kubernete...
閱讀 835·2023-04-25 22:13
閱讀 2347·2019-08-30 15:56
閱讀 2229·2019-08-30 11:21
閱讀 658·2019-08-30 11:13
閱讀 2024·2019-08-26 14:06
閱讀 1962·2019-08-26 12:11
閱讀 2293·2019-08-23 16:55
閱讀 542·2019-08-23 15:30