kubernetes1.9離線部署

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

操做系統版本:
centos7.3 
內核版本: 
3.10.0-327.el7.x86_64css

軟件版本java

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.1node

採用kubeadm安裝linux

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

開始安裝

全部節點操做

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

MD5 (k8s_images.tar.bz2) = b60ad6a638eda472b8ddcfa9006315eesql

解壓下載下來的離線包docker

tar -xjvf k8s_images.tar.bz2

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

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的。

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

啓動docker-ce

systemctl start docker && systemctl enable docker

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

master節點與node節點作互信

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

關閉防火牆和selinux

systemctl stop firewalld && systemctl disable firewalld

vim /etc/selinux/config
SELINUX=disabled

setenforce 0

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

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

導入鏡像

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包

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

systemctl enable kubelet && sudo systemctl start kubelet

開始初始化master

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
修改

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

重啓reload

systemctl daemon-reload && systemctl restart kubelet

查看狀態

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

kubeadm reset

在從新執行

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

將kubeadm join xxx保存下來,等下node節點須要使用
若是忘記了,能夠在master上經過kubeadmin token list獲得
默認token 24小時就會過時,後續的機器要加入集羣須要從新生成token

kubeadm token create

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

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

對於root用戶

export KUBECONFIG=/etc/kubernetes/admin.conf

也能夠直接放到~/.bash_profile

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

source一下環境變量

source ~/.bash_profile

kubectl version測試

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

下載此文件

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

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

"Network": "10.244.0.0/16",

執行

kubectl create -f kube-flannel.yml

node節點操做

使用剛剛kubeadm後的kubeadm join --xxx

kubeadm join --token 361c68.fbafaa96a5381651 192.168.2.110:6443 --discovery-token-ca-cert-hashsha256:e5e392f4ce66117635431f76512d96824b88816dfdf0178dc497972cf8631a98

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

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

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

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

測試集羣

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

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.yaml

修改kubernetes-dashboard.yaml

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

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

kubectl create -f kubernetes-dashboard.yaml

訪問

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驗證

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

加上這行

更新kube-apiserver容器

kubectl apply -f kube-apiserver.yaml

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

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

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

查看

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

在此訪問https://master:32666


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

建立個應用測試

部署成功

相關文章
相關標籤/搜索