環境信息(採用一個master節點+兩個node節點)
master 192.168.2.110
node-1 192.168.2.112
node-2 192.168.2.113node
操做系統版本:
centos7.3
內核版本:
3.10.0-327.el7.x86_64linux
軟件版本git
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
tar -xjvf k8s_images.tar.bz2
安裝docker-ce17.03(kubeadmv1.9最大支持docker-ce17.03)網絡
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
啓動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
使用剛剛kubeadm後的kubeadm join --xxx
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
kubectl run httpd-app --image=httpd --replicas=2
檢查pod
能夠看見pod分佈在node-1和node-2上
由於建立的資源不是service因此不會調用kube-proxy
直接訪問測試
至此kubernetes基本集羣安裝完成。
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 用於存放用戶名和密碼
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
選基本,就能夠經過用戶名和密碼訪問了
建立個應用測試
部署成功
參考連接:
https://kubernetes.io/docs/se...
http://tonybai.com/2017/07/20...