[轉帖] kubeadm搭建kubernetes集羣

http://www.bladewan.com/2018/01/02/kubernetes_install/node

學習中linux

kubernetes V1.9安裝(附離線安裝包和離線鏡像)

簡介

環境信息(採用一個master節點+兩個node節點)
master 192.168.2.110
node-1 192.168.2.112
node-2 192.168.2.113git

軟件版本
kubernetes v1.9
docker:17.03
kubeadm:v1.9.0
kube-apiserver:v1.9.0
kube-controller-manager:v1.9.0
kube-scheduler:v1.9.0
k8s-dns-sidecar:1.14.7
k8s-dns-kube-dns:1.14.7
k8s-dns-dnsmasq-nanny:1.14.7
kube-proxy:v1.9.0
etcd:3.1.10
pause :3.0
flannel:v0.9.1
kubernetes-dashboard:v1.8.1github

採用kubeadm安裝docker

kubeadm爲kubernetes官方推薦的自動化部署工具,他將kubernetes的組件以pod的形式部署在master和node節點上,並自動完成證書認證等操做。
由於kubeadm默認要從google的鏡像倉庫下載鏡像,但目前國內沒法訪問google鏡像倉庫,因此這裏我提交將鏡像下好了,只須要將離線包的鏡像導入到節點中就能夠了。vim

開始安裝

全部節點操做

下載
連接: https://pan.baidu.com/s/1c2O1gIW 密碼: 9s92
比對md5解壓離線包centos

MD5 (k8s_images.tar.bz2) = b60ad6a638eda472b8ddcfa9006315eeapi

解壓下載下來的離線包bash

1
tar -xjvf k8s_images.tar.bz2

 

安裝docker-ce17.03(kubeadmv1.9最大支持docker-ce17.03)markdown

1
2
rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
rpm -ivh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

 

修改docker的鏡像源爲國內的daocloud的。

1
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://a58c8480.m.daocloud.io

啓動docker-ce

1
systemctl start docker && systemctl enable docker

 

綁定hosts
將master和node-一、node-2綁定hosts

master節點與node節點作互信

1
2
3
[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id node-1
[root@master ~]# ssh-copy-id node-2

 

關閉防火牆和selinux

1
systemctl stop firewalld && systemctl disable firewalld

 

vim /etc/selinux/config
SELINUX=disabled

1
setenforce 0

 

配置系統路由參數,防止kubeadm報路由警告

1
2
3
4
5
echo "
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
" >> /etc/sysctl.conf
sysctl -p

 

導入鏡像

1
2
3
4
5
6
7
8
9
10
11
docker load < /root/k8s_images/docker_images/etcd-amd64_v3.1.10.tar
docker load </root/k8s_images/docker_images/flannel\:v0.9.1-amd64.tar
docker load </root/k8s_images/docker_images/k8s-dns-dnsmasq-nanny-amd64_v1.14.7.tar
docker load </root/k8s_images/docker_images/k8s-dns-kube-dns-amd64_1.14.7.tar
docker load </root/k8s_images/docker_images/k8s-dns-sidecar-amd64_1.14.7.tar
docker load </root/k8s_images/docker_images/kube-apiserver-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/kube-controller-manager-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/kube-scheduler-amd64_v1.9.0.tar
docker load < /root/k8s_images/docker_images/kube-proxy-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/pause-amd64_3.0.tar
docker load < /root/k8s_images/docker_images/kubernetes-dashboard_v1.8.1.tar

安裝安裝kubelet kubeadm kubectl包

1
2
3
4
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubeadm-1.9.0-0.x86_64.rpm

 

master節點操做

啓動kubelete

1
systemctl enable kubelet && sudo systemctl start kubelet

 

開始初始化master

1
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16

 

kubernetes默認支持多重網絡插件如flannel、weave、calico,這裏使用flanne,就必需要設置–pod-network-cidr參數,10.244.0.0/16是kube-flannel.yml裏面配置的默認網段,若是須要修改的話,須要把kubeadm init的–pod-network-cidr參數和後面的kube-flannel.yml裏面修改爲同樣的網段就能夠了。


發現kubelet啓動不了
查看日誌/var/log/message

發現原來是kubelet默認的cgroup的driver和docker的不同,docker默認的cgroupfs,kubelet默認爲systemd
修改

1
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

 

重啓reload

1
systemctl daemon-reload && systemctl restart kubelet

 

查看狀態

此時記得將環境reset一下
執行

1
kubeadm reset

 

在從新執行

1
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16

 

將kubeadm join xxx保存下來,等下node節點須要使用
若是忘記了,能夠在master上經過kubeadmin token list獲得

按照上面提示,此時root用戶還不能使用kubelet控制集羣須要,配置下環境變量
對於非root用戶

1
2
3
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

對於root用戶

1
export KUBECONFIG=/etc/kubernetes/admin.conf

 

也能夠直接放到~/.bash_profile

1
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

 

source一下環境變量

1
source ~/.bash_profile

 

kubectl version測試

安裝網絡,可使用flannel、calico、weave、macvlan這裏咱們用flannel。

下載此文件

1
wget https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

 

或直接使用離線包裏面的
若要修改網段,須要kubeadm –pod-network-cidr=和這裏同步
vim kube-flannel.yml
修改network項

1
"Network": "10.244.0.0/16",

 

執行

1
kubectl create -f kube-flannel.yml

node節點操做

使用剛剛kubeadm後的kubeadm join –xxx

1
kubeadm join --token 361c68.fbafaa96a5381651 192.168.2.110:6443 --discovery-token-ca-cert-hash sha256:e5e392f4ce66117635431f76512d96824b88816dfdf0178dc497972cf8631a98

 

屢次加入報錯查看/var/log/message日誌.
這個錯是由於沒有配置前面sysctl的router的環境變量

發現node節點啓動不了flannel容器,查看容器log發現是host上沒有默認路由,在網卡配置文件裏面設置好默認路由。

加入成功
在master節點上check一下

kubernetes會在每一個node節點建立flannel和kube-proxy的pod

測試集羣

在master節點上發起個建立應用請求
這裏咱們建立個名爲httpd-app的應用,鏡像爲httpd,有兩個副本pod

1
kubectl run httpd-app --image=httpd --replicas=2

 

檢查pod
能夠看見pod分佈在node-1和node-2上

由於建立的資源不是service因此不會調用kube-proxy
直接訪問測試

至此kubernetes基本集羣安裝完成。

部署kubernetes-dashboard

kubernetes-dashboard是可選組件,由於,實在很差用,功能太弱了。
建議在部署master時一塊兒把kubernetes-dashboard一塊兒部署了,否則在node節點加入集羣后,kubernetes-dashboard會被kube-scheduler調度node節點上,這樣根kube-apiserver通訊須要額外配置。
下載kubernetes-dashboard的配置文件或直接使用離線包裏面的kubernetes-dashboard.yaml

1
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

 

修改kubernetes-dashboard.yaml

若是須要讓外面訪問須要修改這個yaml文件端口類型爲NodePort默認爲clusterport外部訪問不了,

nodeport端口範圍30000-32767
32666就是個人映射端口,根docker run -d xxx:xxx差很少
建立kubernetes-dashboard

1
kubectl create -f kubernetes-dashboard.yaml

 

訪問

1
https://master_ip:32666

 

默認驗證方式有kubeconfig和token,這裏咱們都不用。
這裏咱們使用basicauth的方式進行apiserver的驗證
建立/etc/kubernetes/manifests/pki/basic_auth_file 用於存放用戶名和密碼

#user,password,userid
admin,admin,2

給kube-apiserver添加basic_auth驗證

1
vim /etc/kubernetes/manifests/kube-apiserver.yaml

 

加上這行

更新kube-apiserver容器

1
kubectl apply kube-apiserver.yaml

 

受權
k8s1.6後版本都採用RBAC受權模型
給admin受權
默認cluster-admin是擁有所有權限的,將admin和cluster-admin bind這樣admin就有cluster-admin的權限。

那咱們將admin和cluster-admin bind在一塊兒這樣admin也擁用cluster-admin的權限了

1
kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin

 

查看

1
kubectl get clusterrolebinding/login-on-dashboard-with-cluster-admin -o yaml

 

在此訪問https://master:32666


選基本,就能夠經過用戶名和密碼訪問了

建立個應用測試

部署成功

參考連接:
https://kubernetes.io/docs/setup/independent/install-kubeadm/
http://tonybai.com/2017/07/20/fix-cannot-access-dashboard-in-k8s-1-6-4/

相關文章
相關標籤/搜索