在CENTOS7下安装kubernetes填坑教程(原创)
? ?
? ?kubernetes(以下簡稱“k8s”)目前是公認的最先進的容器集群管理工具,在1.0版本發布后,k8s的發展速度更加迅猛,并且得到了容器生態圈廠商的全力支持,這包括coreos、rancher等,諸多提供公有云服務的廠商在提供容器服務時也都基于k8s做二次開發來提供基礎設施層的支撐,比如華為??梢哉fk8s也是Docker進軍容器集群管理和服務編排領域最為強勁的競爭對手。
現在的Red Hat centos7的用戶,已經可以使用熟悉的yum來直接安裝k8s,但是真要安裝起來,還是有相當多的坑要踩,本文就主要來幫助大家填平這些大坑!!!
由于k8s涉及到很多組件,關于組件的學習,網上的教程很多,但是還是推薦大家到官網上去學習。http://kubernetes.io/docs/tutorials/
一、環境搭建
在k8s中,主機只有兩種角色master和nodes。我這里準備了3臺centos7主機,其中一臺既是master也是nodes,另外兩臺做nodes。
master安裝的組件有:
docker
etcd ? ? ? 可以理解為是k8s的數據庫,存儲所有節點、pods、網絡信息
kube-proxy ? ?提供service服務的基礎組件
kubelet ? ?管理k8s節點的組件,因為這臺master同時也是nodes,所以也要安裝
kube-apiserver ? k8s提供API的接口,是整個k8s的核心
kube-controller-manager 管理分配資源的組件
kube-scheduler ? ?調度資源的組件
flanneld ? ? 整個k8s的網絡組件
nodes安裝的組件有:
docker
kube-proxy
kubelet
flanneld
接下來就是各節點網絡的搭建,修改/etc/hosts,保證每臺主機的hosts表一致,如下所示:
echo “192.168.128.160 centos-master
192.168.128.161 centos-minion-1
192.168.128.162 centos-minion-2”>> /etc/hosts
最后,記得關閉各節點的SElinux,避免不必要的問題。防火墻也要關閉,避免與docker容器內部的firewall沖突。
| [root@centos-master ~]# systemctl stop firewalld [root@centos-master ~]# systemctl disable firewalld |
二、開始安裝
1.首先在所以節點添加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 |
然后執行yum -y update
2.接下來就開始在各個節點上面安裝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下面查看對應的配置文件,接下來我們開始配置這些配置文件。此處有個坑,因為我們后面會安裝k8s的ui,但是使用k8s的ui必須使用證書的認證,而使用默認的/etc/kubernetes/apiserver配置文件無法正常的啟用此功能(我試了很多次沒有成功,有成功的可以告知我),這里對于kube-apiserver和kube-controller-manage這兩個組件我才用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下指定的私鑰和數字證書,這里我們還沒有生成,所以先不要直接敲入以上的命令,我們先配置其它的配置文件。
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網絡的密鑰,同一網絡配置相同即可)
FLANNEL_OPTIONS="--iface=eno16777736"(此處填寫的實際物理網卡的地址,可以用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\" } }"
注冊flannet網絡到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"
根據我們上面提到的master、nodes安裝的組件,在master和nodes上面修改相關的配置文件,config配置文件最好都修改。
接著我們來生成上面提到生成密鑰和數字證書,在master節點創建security目錄
mkdir -p /root/security
cd /root/security
相關證書文件,說明如下:
| 文件 | 作用 |
| ca.key | 自己生成的CA的私鑰,用于模擬一個CA |
| ca.crt | 用自己的私鑰自簽名的CA證書 |
| server.key | api server的私鑰,用于配置api server的https |
| server.csr | api server的證書請求文件,用于請求api server的證書 |
| server.crt | 用自己模擬的CA簽發的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為集群網絡下mater地址,可以通過命令查看
##kubectl get services --all-namespaces |grep 'default'|grep 'kubernetes'|grep '443'|awk ##'{print $3}',因為集群還沒有啟動,所以查看不到這個地址,可以先添加個錯的,到時候啟動集群以后再修改
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.啟動服務
master節點:
/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節點:
for SERVICES in kube-proxy kubelet flanneld docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
等到服務啟動以后,在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 |
現在整個集群就已經安裝成功了!!
4.安裝dashboard
首先,我們要下載dashboard的鏡像,由于我大中華局域網的存在,導致google官方給的kubernetes-dashboard-amd64:v1.5.0鏡像無法下載(坑爹!!),我們這里先去docker.io站點pull一個v1.4.0版本的鏡像
docker pull docker.io/sailsxu/kubernetes-dashboard-amd64:v1.4.0
然后下載官網給的自動部署文件
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
然后我們執行
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 |
我們可以看到現在dashboard已經運行在centos-minion-2節點上,我們在瀏覽器地址欄查看
https://192.168.128.160/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard/#/workload?namespace=_all
到這里dashboard就已經安裝完畢了。
此教程不涉及k8s的基礎部分,如果有時間,我會再寫一些基礎部分的知識!關于k8s的ui如何使用,我也會在以后的教程中及時更新!!
轉載于:https://blog.51cto.com/phccnp/1890510
總結
以上是生活随笔為你收集整理的在CENTOS7下安装kubernetes填坑教程(原创)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让时间倒流的保存点:用Apache Fl
- 下一篇: 编译时MSIL注入--实践Mono Ce