本文所用脚本由阿里出品,详情参考: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