本文所用腳本由阿里出品,詳情參考:One-liner Kubernetes Deployment in China aka OKDCnode
該腳本執行過程當中, 須要從Internet下載些docker image, flannel yaml. 對於處在內網的企業環境, 雖然可設定代理解決,但對於須要反覆安裝的測試環境,就頭疼了。
本文主要目的,是基於該腳本,修改爲可本地離線安裝。linux
1. 安裝過程當中說須要的docker鏡像清單, 可先行下載, 並放到本地registry :git
registry.aliyuncs.com/archon/hyperkube-amd64 v1.6.2 47c16ab7f7d0 3 months ago 583 MB registry.aliyuncs.com/archon/flannel v0.8.0-amd64 9db3bab8c19e 3 weeks ago 50.73 MB registry.aliyuncs.com/archon/k8s-dns-sidecar-amd64 1.14.1 fc5e302d8309 5 months ago 44.52 MB registry.aliyuncs.com/archon/k8s-dns-kube-dns-amd64 1.14.1 f8363dbf447b 5 months ago 52.36 MB registry.aliyuncs.com/archon/k8s-dns-dnsmasq-nanny-amd64 1.14.1 1091847716ec 5 months ago 44.84 MB registry.aliyuncs.com/archon/etcd 3.0.17 243830dae7dd 5 months ago 168.9 MB registry.aliyuncs.com/archon/pause-amd64 3.0 99e59f495ffa 15 months ago 746.9 kB
本例所建的registry Server,域名是ispcdocker.com.
測試環境內處理好DNS解析; 簡單方法是修改測試涉及到的機器/etc/hosts文件。github
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ispcdocker.com/hyperkube-amd64 v1.6.2 47c16ab7f7d0 2 weeks ago 583 MB ispcdocker.com/etcd 3.0.17 243830dae7dd 10 weeks ago 168.9 MB ispcdocker.com/flannel v0.8.0-amd64 9db3bab8c19e 3 weeks ago 77.76 MB ispcdocker.com/k8s-dns-sidecar-amd64 1.14.1 fc5e302d8309 10 weeks ago 44.52 MB ispcdocker.com/k8s-dns-kube-dns-amd64 1.14.1 f8363dbf447b 10 weeks ago 52.36 MB ispcdocker.com/k8s-dns-dnsmasq-nanny-amd64 1.14.1 1091847716ec 10 weeks ago 44.84 MB ispcdocker.com/pause-amd64 3.0 99e59f495ffa 12 months ago 746.9 kB
2. 安裝過程,涉及到從Internet下載flannel pod 配置文件,可先行下載,並放到本地webweb
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
3. 本文主角,okdc-centos.sh也該先下載,並放本地webdocker
https://raw.githubusercontent.com/kubeup/okdc/master/okdc-centos.sh
4. 在待安裝服務器上,可選擇執行此步驟, 先行安裝kube 及docker軟件包,簡化後續的步驟。過程當中用到的rpm軟件包, 可參考我 另外一篇文章,經由在線安裝模式後,放在本地rpm repos .centos
# yum install -y docker kubelet kubeadm kubectl kubernetes-cni redhat-lsb-core
# systemctl enable docker && systemctl start dockerapi
5. 在待安裝服務器上,下載並修改kube-okdc.shbash
wget http://10.245.254.93/linux/soft/docker/kubernetes/kube-okdc.sh # 修改k8s repos到本地 sed -i "s#https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el\$OS_VERSION-\$ARCH#http://10.245.254.93/linux/soft/epel/7#g" kube-okdc.sh # 修改kube-flannel.yml文件從本地下載 sed -i "s#https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml#http://10.245.254.93/linux/soft/docker/kubernetes/kube-flannel.yml#g" kube-okdc.sh sed -i "s#https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml#http://10.245.254.93/linux/soft/docker/kubernetes/kube-flannel-rbac.yml#g" kube-okdc.sh # 修改docker registry到本地 sed -i "s|registry.aliyuncs.com/archon|ispcdocker.com|g" kube-okdc.sh sed -i '90a\sed -i "s#image: /flannel#image: ispcdocker.com/flannel#g" /tmp/flannel.yaml' kube-okdc.sh # 取消kubeadm不成熟的--config 配置參數,使用標準參數模式 # 這句話,經由趟坑無數,淚水所得... # 文件/tmp/kubeadm.conf 內容以下,非默認選項的只有後3項,因此直接在命令行中指定 # apiVersion: kubeadm.k8s.io/v1alpha1 # kind: MasterConfiguration # networking: # podSubnet: 10.244.0.0/16 # kubernetesVesion: v1.6.2 # token: wsrmjj.lw2fsz5pchjrprpe sed -i "s|skip-preflight-checks --config /tmp/kubeadm.conf|kubernetes-version=v1.6.2 --pod-network-cidr=10.244.0.0/16 --token \$TOKEN|g" kube-okdc.sh
6. 開始安裝服務器
sh ./kube-okdc.sh
7. 進階:
// Package hyperkube is a framework for kubernetes server components. It
// allows us to combine all of the kubernetes server components into a single
// binary where the user selects which components to run in any individual process.
hyperkube-amd64_v1.6.2,這個鏡像,在功能上,包括下述4個部分:
kube-apiserver-amd64_v1.6.2
kube-controller-manager-amd64_v1.6.2
kube-proxy-amd64_v1.6.2
kube-scheduler-amd64_v1.6.2
因此,在安裝階段,若是取消腳本內的KUBE_HYPERKUBE_IMAGE變量申明,那麼默認會自動安裝上述4個子鏡像; 在k8s功能上,區別不大.
官方說明以下:If set, use a single hyperkube image with this name. If not set, individual images per server component will be used.
sed -i "s|KUBE_HYPERKUBE_IMAGE=\$HYPERKUBE_IMG KUBE|KUBE|g" kube-okdc.sh
8. 完整腳本
wget -P /etc/docker/certs.d/ispcdocker.com http://10.245.254.93/linux/soft/docker/ispcdocker.com.crt echo '10.247.15.70 ispcdocker.com' >> /etc/hosts yum install redhat-lsb-core -y curl http://10.245.254.93/linux/soft/docker/kubernetes/kube-centos-1.1-v1.6.2.sh > kube-okdc.sh sed -i "s#https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el\$OS_VERSION-\$ARCH#http://10.245.254.93/linux/soft/docker/repo.packages#g" kube-okdc.sh sed -i "s#https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml#http://10.245.254.93/linux/soft/docker/kubernetes/kube-flannel-v0.8.0.yml#g" kube-okdc.sh sed -i "s#https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml#http://10.245.254.93/linux/soft/docker/kubernetes/kube-flannel-v0.8.0-rbac.yml#g" kube-okdc.sh sed -i "s|registry.aliyuncs.com/archon|ispcdocker.com|g" kube-okdc.sh sed -i '90a\sed -i "s#image: /flannel#image: ispcdocker.com/flannel#g" /tmp/flannel.yaml' kube-okdc.sh sed -i "s|skip-preflight-checks --config /tmp/kubeadm.conf|kubernetes-version=v1.6.2 --pod-network-cidr=10.244.0.0/16 --token \$TOKEN|g" kube-okdc.sh sed -i "s|gpgcheck=1|gpgcheck=0|g" kube-okdc.sh sed -i '262c\ if [ "$OS" = "CentOS" ]; then' kube-okdc.sh sh ./kube-okdc.sh ----for dashboard, install at master site wget http://10.245.254.93/linux/soft/docker/kubernetes/heapster/influxdb.yaml wget http://10.245.254.93/linux/soft/docker/kubernetes/heapster/grafana.yaml wget http://10.245.254.93/linux/soft/docker/kubernetes/heapster/heapster.yaml wget http://10.245.254.93/linux/soft/docker/kubernetes/kubernetes-dashboard-v1.6.3.yaml sed -i "s|gcr.io/google_containers|ispcdocker.com|g" *.yaml mkdir -p dashboard && mv *yaml dashboard kubectl create -f dashboard/ kubectl proxy --address='0.0.0.0' --port=8001 --accept-hosts='^*$' & ----for minion site kubeadm token list cat kube-okdc.sh |TOKEN=lzp7qv.equa9e0oolowtxlc MASTER=10.247.15.75:6443 sh ----check status export KUBECONFIG=/etc/kubernetes/admin.conf kubectl get nodes kubectl get pods --all-namespaces -o wide