k8s離線包解析
鳴謝
- 大家好,首先感謝大家對我們產品的支持,特別是一些老客戶的持續支持,讓我可以有動力把這個事情持續進行下去。
- 感謝大家對付費產品的認可,尊重付費
產品介紹
我們專注於k8s離線包的製作,優化細節,讓大家可以很方便快速的安裝k8s集羣。
下面詳細介紹安裝包的原理以及如何去製作一個這樣的包,大家參考我的方法也可以製作自己想要的版本然後用於自己的離線環境
<!--more-->
目錄結構
.
├── bin # 指定版本的bin文件,只需要這三個,其它組件跑容器裏
│ ├── kubeadm
│ ├── kubectl
│ └── kubelet
├── conf
│ ├── 10-kubeadm.conf # 這個文件新版本沒用到,我在shell裏直接生成,這樣可以檢測cgroup driver
│ ├── dashboard
│ │ ├── dashboard-admin.yaml
│ │ └── kubernetes-dashboard.yaml
│ ├── heapster
│ │ ├── grafana.yaml
│ │ ├── heapster.yaml
│ │ ├── influxdb.yaml
│ │ └── rbac
│ │ └── heapster-rbac.yaml
│ ├── kubeadm.yaml # kubeadm的配置文件
│ ├── kubelet.service # kubelet systemd配置文件
│ ├── net
│ │ └── calico.yaml
│ └── promethus
├── images # 所有鏡像包
│ └── images.tar
└── shell
├── init.sh # 初始化腳本
└── master.sh # 運行master腳本
init.sh解析
# 網絡配置,讓calico可以路由
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
sysctl -w net.ipv4.ip_forward=1
# 關閉防火牆 交換分區 selinux
systemctl stop firewalld && systemctl disable firewalld
swapoff -a
setenforce 0
# 導入鏡像
docker load -i ../images/images.tar
cp ../bin/kube* /usr/bin
# Cgroup driver
cp ../conf/kubelet.service /etc/systemd/system/
mkdir /etc/systemd/system/kubelet.service.d
# 獲取docker Cgroup driver類型,kubelet systemd配置需要一致
cgroupDriver=$(docker info|grep Cg)
driver=${cgroupDriver##*: }
echo "driver is ${driver}"
cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=${driver}" # 看這裏
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
ExecStart=
ExecStart=/usr/bin/kubelet \$KUBELET_KUBECONFIG_ARGS \$KUBELET_SYSTEM_PODS_ARGS \$KUBELET_NETWORK_ARGS \$KUBELET_DNS_ARGS \$KUBELET_AUTHZ_ARGS \$KUBELET_CADVISOR_ARGS \$KUBELET_CGROUP_ARGS \$KUBELET_CERTIFICATE_ARGS \$KUBELET_EXTRA_ARGS
EOF
systemctl enable kubelet
systemctl enable docker
master.sh解析
# 啓動kubeadm
kubeadm init --config ../conf/kubeadm.yaml
# kubectl配置拷貝
mkdir ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config
# 裝網絡
kubectl apply -f ../conf/net/calico.yaml
# 去污點,生產環境中最好不去,我是爲了heapster能正常啓動
kubectl taint nodes --all node-role.kubernetes.io/master-
# 裝heapster
kubectl apply -f ../conf/heapster/
kubectl apply -f ../conf/heapster/rbac
# 裝dashboard
kubectl apply -f ../conf/dashboard
製作過程
下載bin文件
我們到github kubernetes下把bin文件下載下來,只需要下載node的bin即可,當然如果你master鏡像不好下載也可以下載全部bin
如:node bin文件
拷貝到/usr/bin下面,kubectl kubeadm kubelet 三個是必須的
拷貝kubelet service文件,腳本里有
修改kubeadm.yaml
修改裏面版本與bin版本一致,然後啓動kubeadm kubeadm init --config kubeadm.yaml
這裏可能有的鏡像下載不下來,你就得導入了
一切正常後保存所有鏡像
docker save -o images.tar $(docker images|grep ago|awk '{print $1":"$2}')
這裏最好搞乾淨的服務器,不然別的鏡像也會被save下來
掃碼關注sealyun
探討可加QQ羣:98488045