2016/11/16 23:39:58
環境:
centos7
[fu@centos server]$ uname -a
Linux centos 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
1. 初始化環境
關閉防火牆:
[root@k8s-master fu]# systemctl stop firewalld
[root@k8s-master fu]# systemctl disable firewalld
1.1 環境:
節點 | IP |
---|---|
node-1 | 192.168.44.129 |
node-2 | 192.168.44.131 |
node-3 | 192.168.44.132 |
1.2 設置hostname
hostnamectl --static set-hostname hostname
IP | hostname |
---|---|
192.168.44.129 | k8s-master |
192.168.44.131 | k8s-node-1 |
192.168.44.132 | k8s-node-2 |
master:
[root@centos fu]# hostnamectl --static set-hostname k8s-master
node-1
[root@centos fu]# hostnamectl --static set-hostname k8s-node-1
node-2
[root@centos fu]# hostnamectl --static set-hostname k8s-node-2
1.3 配置 hosts
vi /etc/hosts
IP | hostname |
---|---|
192.168.44.129 | k8s-master |
192.168.44.131 | k8s-node-1 |
192.168.44.132 | k8s-node-2 |
分別在hosts中加入:
192.168.44.129 k8s-master
192.168.44.131 k8s-node-1
192.168.44.132 k8s-node-2
或者,直接執行,在hosts中追加:
echo '192.168.44.129 k8s-master
192.168.44.131 k8s-node-1
192.168.44.132 k8s-node-2' >> /etc/hosts
1.4安裝kubelet 和kubeadm
添加yum (注:root用戶下執行)
cat <<EOF > /etc/yum.repos.d/k8s.repo
[kubelet]
name=kubelet
baseurl=http://files.rm-rf.ca/rpms/kubelet/
enabled=1
gpgcheck=0
EOF
安裝並啟動:
yum install docker kubelet kubeadm kubectl kubernetes-cni
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
cat <<EOF > /etc/yum.repos.d/k8s.repo
[kubelet]
name=kubelet
baseurl=http://files.rm-rf.ca/rpms/kubelet/
enabled=1
gpgcheck=0
EOF
yum install docker kubelet kubeadm kubectl kubernetes-cni
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
2 部署 kubernetes master
2.1 添加yum(如環境統一處理,此處略過)
注:root用戶下執行
cat <<EOF> /etc/yum.repos.d/k8s.repo
[kubelet]
name=kubelet
baseurl=http://files.rm-rf.ca/rpms/kubelet/
enabled=1
gpgcheck=0
EOF
安裝 kubernetes依賴環境:
yum有很多源,大多是網絡上的。
makecache建立一個緩存,以后用install安裝軟件時就在緩存中搜索,提高了速度。
[root@k8s-master fu]# yum makecache
[root@k8s-master fu]# yum install -y socat kubelet kubeadm kubectl kubernetes-cni


2.2 安裝docker
wget -qO- https://get.docker.com/ | sh
如果提示:
bash: wget: 未找到命令
則先安裝wget:
[root@centos fu]# yum -y install wget
如果已經安裝過dokcer則可直接啟動:
提示未啟動:
[root@centos fu]# docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

docker設為開機啟動並啟動:
systemctl enable docker
systemctl start docker
2.3 下載鏡像
images=(kube-proxy-amd64:v1.4.5 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.5 kube-controller-manager-amd64:v1.4.5 kube-apiserver-amd64:v1.4.5 etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.1)
for imageName in ${images[@]} ; do
docker pull jicki/$imageName
docker tag jicki/$imageName gcr.io/google_containers/$imageName
docker rmi jicki/$imageName
done
2.4 啟動 kubernetes
systemctl enable kubelet
systemctl start kubelet
2.5 創建集群
kubeadm init --api-advertise-addresses=192.168.44.129 --use-kubernetes-version v1.4.5
如提示:
Running pre-flight checks
preflight check errors:
/etc/kubernetes is not empty
則:
[root@k8s-master kubernetes]# rm -rf manifests/
然后再執行 init
2.6 記錄 token
init打出的日志,把加入集群的token記錄下來。
Kubernetes master initialised successfully!
You can now join any number of machines by running the following on each node:
kubeadm join --token=a46536.cad65192491d2fd9 192.168.44.129
2.7 檢查 kubelet 狀態
systemctl status kubelet

2.8 查詢集群pods:
[root@k8s-master system]# kubectl get nodes

3 部署 kubernetes node
3.1 安裝docker
wget -qO- https://get.docker.com/ | sh
如果提示:
bash: wget: 未找到命令
則先安裝wget:
[root@centos fu]# yum -y install wget
設置docker開機啟動並啟動:
systemctl enable docker
systemctl start docker
3.2 下載鏡像
images=(kube-proxy-amd64:v1.4.5 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.5 kube-controller-manager-amd64:v1.4.5 kube-apiserver-amd64:v1.4.5 etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.1)
for imageName in ${images[@]} ; do
docker pull jicki/$imageName
docker tag jicki/$imageName gcr.io/google_containers/$imageName
docker rmi jicki/$imageName
done
3.3 安裝並啟動 kubernetes(如環境統一處理,此處略過)
可以按上面先指定yum源,速度會有提升
yum makecache
yum install -y socat kubelet kubeadm kubectl kubernetes-cni
systemctl enable kubelet
systemctl start kubelet
3.4 加入集群
復制自己master創建集群的返回值
- kubeadm join --token=a46536.cad65192491d2fd9 192.168.44.129
返回如下錯誤,須手動清空該目錄

如果此錯誤,請查看防火牆或selinux

返回:

都加入成功后,通過get nodes查看集群狀態:

重啟機器會有延遲:

4 設置 kubernetes
[fu@k8s-master ~]$ kubectl apply -f https://git.io/weave-kube
daemonset "weave-net" created
[fu@k8s-master ~]$ kubectl apply -f https://git.io/weave-kube
daemonset "weave-net" created
4.2 查看系統服務狀態
查看所有的namespaces中的pods
[fu@k8s-master ~]$ kubectl get pods --all-namespaces

kube
-
dns
必須配置完網絡才能
Running
4.3 其他
主機控制集群
將master中文件,/etc/kubernetes/admin.conf拷貝到其它node節點,可以下載再上傳,也可以主機間拷貝
主機間拷貝:
[root@k8s-master fu]# scp admin.conf fu@192.168.44.131:/home/fu
[root@k8s-master fu]# scp admin.conf fu@192.168.44.132:/home/fu
復制文件命令格式:scp local_file remote_username@remote_ip:remote_folder

node節點查詢集群nodes狀態命令:
[fu@k8s-node-2 ~]$ kubectl --kubeconfig ./admin.conf get nodes
可以看到跟在master上運行效果一樣:
想看一下admin.conf是啥,可以more或cat,more按空格分頁
[root@k8s-master fu]# more admin.conf
4.4 配置dashboard
#在master節點下載 yaml 文件, 直接導入會去官方拉取images
[fu@k8s-master ~]$ curl -O https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml
編輯 yaml 文件,默認的 yaml 文件中對於 image 拉取策略的定義是 無論何時都會去拉取鏡像
[fu@k8s-master ~]$ vi kubernetes-dashboard.yaml
編輯 yaml 改一下 imagePullPolicy
,把 Always
改成 IfNotPresent
(本地沒有再去拉取) 或者 Never
(從不去拉取) 即可
imagePullPolicy: Always
修改為:
imagePullPolicy: IfNotPresent
修改為:
創建:
[fu@k8s-master ~]$ kubectl create -f ./kubernetes-dashboard.yaml

查看 NodePort ,既外網訪問端口
[fu@k8s-master ~]$ kubectl describe svc kubernetes-dashboard --namespace=kube-system
通過 describe 命令我們可以查看其暴露出的 NodePoint
,然后便可訪問:
瀏覽器中訪問 dashboard,端口NodePort
192.168.44.129:32145
如打不開,可以查看一下pod狀態,是否創建完成。
[fu@k8s-master ~]$ kubectl get pod --namespace=kube-system
都Running后,效果如下:
如有遇到此問題,按下解決,我沒遇到。
FAQ:
kube-discovery error
failed to create "kube-discovery" deployment [deployments.extensions "kube-discovery" already exists]
systemctl stop kubelet;
docker rm -f -v $(docker ps -q);
find /var/lib/kubelet | xargs -n 1 findmnt -n -t tmpfs -o TARGET -T | uniq | xargs -r umount -v;
rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd;
systemctl start kubelet
kubeadm init
推薦博客***:
https://mritd.me/2016/10/29/set-up-kubernetes-cluster-by-kubeadm/
github上,kubernetes版本:https://github.com/kubernetes/kubernetes/releases
