在CENTOS7下安装kubernetes填坑教程(原创)
? ?
? ?kubernetes(以下簡稱“k8s”)目前是公認(rèn)的最先進(jìn)的容器集群管理工具,在1.0版本發(fā)布后,k8s的發(fā)展速度更加迅猛,并且得到了容器生態(tài)圈廠商的全力支持,這包括coreos、rancher等,諸多提供公有云服務(wù)的廠商在提供容器服務(wù)時(shí)也都基于k8s做二次開發(fā)來提供基礎(chǔ)設(shè)施層的支撐,比如華為。可以說k8s也是Docker進(jìn)軍容器集群管理和服務(wù)編排領(lǐng)域最為強(qiáng)勁的競爭對(duì)手。
現(xiàn)在的Red Hat centos7的用戶,已經(jīng)可以使用熟悉的yum來直接安裝k8s,但是真要安裝起來,還是有相當(dāng)多的坑要踩,本文就主要來幫助大家填平這些大坑!!!
由于k8s涉及到很多組件,關(guān)于組件的學(xué)習(xí),網(wǎng)上的教程很多,但是還是推薦大家到官網(wǎng)上去學(xué)習(xí)。http://kubernetes.io/docs/tutorials/
一、環(huán)境搭建
在k8s中,主機(jī)只有兩種角色master和nodes。我這里準(zhǔn)備了3臺(tái)centos7主機(jī),其中一臺(tái)既是master也是nodes,另外兩臺(tái)做nodes。
master安裝的組件有:
docker
etcd ? ? ? 可以理解為是k8s的數(shù)據(jù)庫,存儲(chǔ)所有節(jié)點(diǎn)、pods、網(wǎng)絡(luò)信息
kube-proxy ? ?提供service服務(wù)的基礎(chǔ)組件
kubelet ? ?管理k8s節(jié)點(diǎn)的組件,因?yàn)檫@臺(tái)master同時(shí)也是nodes,所以也要安裝
kube-apiserver ? k8s提供API的接口,是整個(gè)k8s的核心
kube-controller-manager 管理分配資源的組件
kube-scheduler ? ?調(diào)度資源的組件
flanneld ? ? 整個(gè)k8s的網(wǎng)絡(luò)組件
nodes安裝的組件有:
docker
kube-proxy
kubelet
flanneld
接下來就是各節(jié)點(diǎn)網(wǎng)絡(luò)的搭建,修改/etc/hosts,保證每臺(tái)主機(jī)的hosts表一致,如下所示:
echo “192.168.128.160 centos-master
192.168.128.161 centos-minion-1
192.168.128.162 centos-minion-2”>> /etc/hosts
最后,記得關(guān)閉各節(jié)點(diǎn)的SElinux,避免不必要的問題。防火墻也要關(guān)閉,避免與docker容器內(nèi)部的firewall沖突。
| [root@centos-master ~]# systemctl stop firewalld [root@centos-master ~]# systemctl disable firewalld |
二、開始安裝
1.首先在所以節(jié)點(diǎn)添加k8s組件下載的yum源,如下所示:
| cat <<EOF> /etc/yum.repos.d/virt7-docker-common-release.repo <<-'EOF' [virt7-docker-common-release] name=virt7-docker-common-release baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/ gpgcheck=0 EOF |
然后執(zhí)行yum -y update
2.接下來就開始在各個(gè)節(jié)點(diǎn)上面安裝k8s組件了。
master:
yum install -y docker etcd ?kube-proxy kubelet ?kube-apiserver ?kube-controller-manage kube-scheduler flanneld
nodes:
yum install -y etcd ?kube-proxy kubelet flanneld
安裝完畢后可以到/etc/kubernetes下面查看對(duì)應(yīng)的配置文件,接下來我們開始配置這些配置文件。此處有個(gè)坑,因?yàn)槲覀兒竺鏁?huì)安裝k8s的ui,但是使用k8s的ui必須使用證書的認(rèn)證,而使用默認(rèn)的/etc/kubernetes/apiserver配置文件無法正常的啟用此功能(我試了很多次沒有成功,有成功的可以告知我),這里對(duì)于kube-apiserver和kube-controller-manage這兩個(gè)組件我才用CLI的方式。
kube-apiserver:
/usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://centos-master:2379 --address=0.0.0.0 --port=8080 --kubelet-port=10250 --allow-privileged=true --service-cluster-ip-range=10.254.0.0/16 --admission-control=ServiceAccount --insecure-bind-address=0.0.0.0 --client-ca-file=/root/security/ca.crt --tls-cert-file=/root/security/server.crt --tls-private-key-file=/root/security/server.key --basic-auth-file=/root/security/basic_auth.csv --secure-port=443 &>> /var/log/kubernetes/kube-apiserver.log &
kube-controller-manage:
/usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://centos-master:8080 --root-ca-file=/root/security/ca.crt --service-account-private-key-file=/root/security/server.key & >>/var/log/kubernetes/kube-controller-manage.log &
大家有注意看到我這里在/root/security下指定的私鑰和數(shù)字證書,這里我們還沒有生成,所以先不要直接敲入以上的命令,我們先配置其它的配置文件。
etcd:
編輯/etc/etcd/etcd.conf
ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
flanneld:
編輯/etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://centos-master:2379"
FLANNEL_ETCD_PREFIX="/kube-centos/network"(此處是配置flannel網(wǎng)絡(luò)的密鑰,同一網(wǎng)絡(luò)配置相同即可)
FLANNEL_OPTIONS="--iface=eno16777736"(此處填寫的實(shí)際物理網(wǎng)卡的地址,可以用ip a命令查看,我的是eno16777736)
##etcdctl mkdir /kube-centos/network
##etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }"
注冊(cè)flannet網(wǎng)絡(luò)到etcd中
kubelet:
編輯/etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=centos-master"
KUBELET_API_SERVER="--api-servers=http://centos-master:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-p_w_picpath=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
config:
編輯/etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_ETCD_SERVERS="--etcd-servers=http://centos-master:2379"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://centos-master:8080"
根據(jù)我們上面提到的master、nodes安裝的組件,在master和nodes上面修改相關(guān)的配置文件,config配置文件最好都修改。
接著我們來生成上面提到生成密鑰和數(shù)字證書,在master節(jié)點(diǎn)創(chuàng)建security目錄
mkdir -p /root/security
cd /root/security
相關(guān)證書文件,說明如下:
| 文件 | 作用 |
| ca.key | 自己生成的CA的私鑰,用于模擬一個(gè)CA |
| ca.crt | 用自己的私鑰自簽名的CA證書 |
| server.key | api server的私鑰,用于配置api server的https |
| server.csr | api server的證書請(qǐng)求文件,用于請(qǐng)求api server的證書 |
| server.crt | 用自己模擬的CA簽發(fā)的api server的證書,用于配置api server的https |
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=ph_ccnp" -days 10000 -out ca.crt
openssl genrsa -out server.key 2048
echo subjectAltName=IP:10.254.0.1 > extfile.cnf
##10.254.0.1為集群網(wǎng)絡(luò)下mater地址,可以通過命令查看
##kubectl get services --all-namespaces |grep 'default'|grep 'kubernetes'|grep '443'|awk ##'{print $3}',因?yàn)榧哼€沒有啟動(dòng),所以查看不到這個(gè)地址,可以先添加個(gè)錯(cuò)的,到時(shí)候啟動(dòng)集群以后再修改
openssl req -new -key server.key -subj "/CN=ph_ccnp" -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out server.crt -days 10000
3.啟動(dòng)服務(wù)
master節(jié)點(diǎn):
/usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://centos-master:2379 --address=0.0.0.0 --port=8080 --kubelet-port=10250 --allow-privileged=true --service-cluster-ip-range=10.254.0.0/16 --admission-control=ServiceAccount --insecure-bind-address=0.0.0.0 --client-ca-file=/root/security/ca.crt --tls-cert-file=/root/security/server.crt --tls-private-key-file=/root/security/server.key --basic-auth-file=/root/security/basic_auth.csv --secure-port=443 &>> /var/log/kubernetes/kube-apiserver.log &
/usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://centos-master:8080 --root-ca-file=/root/security/ca.crt --service-account-private-key-file=/root/security/server.key & >>/var/log/kubernetes/kube-controller-manage.log &
for SERVICES in etcd kube-proxy kube-scheduler flanneld; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
nodes節(jié)點(diǎn):
for SERVICES in kube-proxy kubelet flanneld docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
等到服務(wù)啟動(dòng)以后,在master上面輸入kubectl get nodes
| [root@centos-master kubernetes]# kubectl get nodes NAME ? ? ? ? ? ? ?STATUS ? ?AGE centos-master ? ? Ready ? ? 5d centos-minion-1 ? Ready ? ? 12d centos-minion-2 ? Ready ? ? 12d |
現(xiàn)在整個(gè)集群就已經(jīng)安裝成功了!!
4.安裝dashboard
首先,我們要下載dashboard的鏡像,由于我大中華局域網(wǎng)的存在,導(dǎo)致google官方給的kubernetes-dashboard-amd64:v1.5.0鏡像無法下載(坑爹!!),我們這里先去docker.io站點(diǎn)pull一個(gè)v1.4.0版本的鏡像
docker pull docker.io/sailsxu/kubernetes-dashboard-amd64:v1.4.0
然后下載官網(wǎng)給的自動(dòng)部署文件
curl ?https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml -o kubernetes-dashborad.yaml
此處需修改三處:
1.p_w_picpath: docker.io/sailsxu/kubernetes-dashboard-amd64:v1.4.0
2.p_w_picpathPullPolicy: Always ?把此行取消,否則它總是去register取鏡像
3.# - --apiserver-host=http://my-address:port,修改為- --apiserver-host=http://centos-master:8080
然后我們執(zhí)行
kubectl create -f kubernetes-dashborad.yaml
kubectl get po --namespace=kube-system
| NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY STATUS RESTARTS AGE kubernetes-dashboard-2963774231-uzsul ? ? ? 1/1 ? ?Running 1 ? ? ? ? ? ? ?15h |
kubectl --namespace=kube-system get po -o wide
| NAME READY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?STATUS ? ?RESTARTS ? ? ?AGE ? ? ? ? ? ?IP ? ? ? NODE kubernetes-dashboard-2963774231-uzsul 1/1 Running ?15h 172.30.9.2 centos-minion-2 |
我們可以看到現(xiàn)在dashboard已經(jīng)運(yùn)行在centos-minion-2節(jié)點(diǎn)上,我們?cè)跒g覽器地址欄查看
https://192.168.128.160/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard/#/workload?namespace=_all
到這里dashboard就已經(jīng)安裝完畢了。
此教程不涉及k8s的基礎(chǔ)部分,如果有時(shí)間,我會(huì)再寫一些基礎(chǔ)部分的知識(shí)!關(guān)于k8s的ui如何使用,我也會(huì)在以后的教程中及時(shí)更新!!
轉(zhuǎn)載于:https://blog.51cto.com/phccnp/1890510
總結(jié)
以上是生活随笔為你收集整理的在CENTOS7下安装kubernetes填坑教程(原创)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让时间倒流的保存点:用Apache Fl
- 下一篇: 编译时MSIL注入--实践Mono Ce