通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]
參照了網上N多文檔,不一一列表,共享精神永存!!!!
==================================================
獲取所有安裝包
安裝包分為兩類,rpm安裝包和docker鏡像
rpm安裝包
rpm為以下四個
kubeadm-1.7.0-0.x86_64.rpm
kubectl-1.7.0-0.x86_64.rpm
kubelet-1.7.0-0.x86_64.rpm
kubernetes-cni-0.5.1-0.x86_64.rpm
?
A, 從github上clone以下項目:
https://github.com/kubernetes/release
B,進入rpm目錄,執行docker-build.sh腳本,會在output目錄下生成那4個rpm安裝包。
????? *如果只生成amd-64的包,修改一下腳本,把其它幾個構架的去掉。
????? *這些安裝包的生成,需要fedora:24鏡像,最好提前準備。
核心docker鏡像
A, 下載kubernetes 1.7.0 release軟件包kubernetes-server-linux-amd64.tar.gz
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md
B, 解壓kubernetes-server-linux-amd64.tar.gz文件,在server/bin目錄下,以下幾個文件為kubernetes的核心docker鏡像:
kube-apiserver.tar
kube-controller-manager.tar
kube-scheduler.tar
kube-proxy.tar
kube-aggregator.tar
將這些鏡像導入harbor倉庫便以后備用。
*因為k8s的官方鏡像都放在google上,不FQ一般不能直接下載,附錄會寫一個如何結合github,dockerhub,daocloud來獲取指定鏡像的辦法。
擴展docker鏡像
擴展的docker鏡像,涉及etcd,flannel,traefik,nginx,tomcat等,后面結合場景寫清楚。
所有節點初始化
主要是確認服務器的各項系統指標滿足安裝kubernetes的要求。
*RedHat發行版本為: 7.3 (Maipo)
*Linux內核版本為:3.10.0-514.el7.x86_64
docker安裝
這個安裝我們沒有涉及,原本已安裝好,版本為17.05.0-ce, build 89658be
注意新增/etc/systemd/system/docker.service.d/docker.conf文件:
[Service] ExecStart= ExecStart=/usr/bin/dockerd --graph=/dockerVolume --storage-driver=overlay --insecure-registry habor-ip-address
它改寫了docker的存儲目錄,且定義了harbor倉庫地址。
禁用selinux
確認/usr/sbin/sestatus命令輸出為:disabled
禁用ipv6
確認以下兩條命令均無顯示
lsmod | grep -i ipv6
ifconfig | grep -i inet6
開啟路由轉發
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
Iptables清空及禁用
iptables -Xiptables -Ziptables -P INPUT ACCEPTiptables -F?
*默認禁用,通過硬防來控制規則。
主節點安裝
上傳rpm文件
將所有涉及的rpm包上傳到服務器的一個安裝目錄(e.g:/root/k8s/)
上傳docker鏡像
將前節提到的docker images上傳到harbor倉庫(harbor-ip-address)
運行初始化前腳本
生成并運行以下腳本,進行master初始化前安裝。(k8s-master-setup_before.sh)
?
#!/bin/bashHARBORPRE="1.2.3.4/kubernets/" DOCKERS=(${HARBORPRE}/gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.4 ${HARBORPRE}/gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.4 ${HARBORPRE}/gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.4 ${HARBORPRE}/gcr.io/google_containers/pause-amd64:3.0 ${HARBORPRE}/quay.io/coreos/flannel-amd64:v0.8.0${HARBORPRE}/gcr.io/google_containers/etcd-amd64:3.0.17 ${HARBORPRE}/gcr.io/google_containers/kube-proxy-amd64:v1.7.0 ${HARBORPRE}/gcr.io/google_containers/kube-apiserver-amd64:v1.7.0 ${HARBORPRE}/gcr.io/google_containers/kube-controller-manager-amd64:v1.7.0 ${HARBORPRE}/gcr.io/google_containers/kube-scheduler-amd64:v1.7.0 ${HARBORPRE}/gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.1 )#登陸harbor,拉取鏡像,更改名稱 docker login -u USER -p PASSWORD http://1.2.3.4 echo '====docker login====='for DOCKER in ${DOCKERS[@]}; dodocker pull ${DOCKER}docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}docker rmi ${DOCKER} doneecho '====docker pull image and change tag=====' #安裝rpm包 rpm -ivh ./*.rpm --nodeps --forceecho '====kubelet, kubeadm, kubectl install=====' # 有的腳本讀取執行文件路徑不一樣 \cp -f /usr/bin/kube* /usr/local/bin/echo '====cp exe file from /usr/bin to /usr/local/bin=====' #將docker文件驅動從systemd更改為cgroupfs,安裝不對,會報錯 sed -i 's/systemd/cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.confecho '====change kubeadm file from systemd to cgroupfs====='systemctl daemon-reloadecho '====daemon-reload=====' #啟動kubelet服務 systemctl start kubelet.serviceecho '====start kubelet=====' #以防萬一,初始化kubeadm并清除以前安裝可能留下的痕跡 kubeadm resetifconfig cni0 down ip link delete cni0 ifconfig flannel.1 down ip link delete flannel.1 rm -rf /var/lib/cni/iptables -X iptables -Z iptables -P INPUT ACCEPT iptables -Fecho '====kubeadm reset=====' echo '====kube master setup finished====='?
初始化kubernetes集群
kubeadm init --apiserver-advertise-address=k8s-master-ip-address --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.7.0?
*一定要指定version,k8s才不會去網上拉docker,指定pod的cidr,因為后面我們是用flannel作vxlan網絡支撐.
*一般等待1分鐘左右,初始化即可完成。如有問題,可及時查看/var/log/message進行排錯。
運行初始化后腳本
生成并運行以下腳本,進行master初始化后安裝。(k8s-master-setup_after.sh)
*以下幾個文件都是github里的標準文件
?
#!/bin/bashmkdir -p $HOME/.kube \cp -f /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/configkubectl apply -f ./kube-flannel-rbac.yaml kubectl apply -f ./kube-flannel.yaml kubectl apply -f ./kube-dashboard-rbac.yaml kubectl apply -f ./kube-dashboard.yaml?
確認安裝
運行kubectl get命令,確認所有pod及svc狀態正常.
kubectl get pods --all-namespaceskubectl get svc --all-namespaces從節點安裝
上傳rpm文件
將所有涉及的rpm包上傳到服務器的一個安裝目錄(e.g:/root/k8s/)
運行從節點前置腳本
生成并運行以下腳本,進行從節點加入前安裝。(k8s-node-setup.sh)
#!/bin/bashHARBORPRE="1.2.3.4/kubernets/" DOCKERS=(${HARBORPRE}/gcr.io/google_containers/pause-amd64:3.0 ${HARBORPRE}/quay.io/coreos/flannel-amd64:v0.8.0${HARBORPRE}/gcr.io/google_containers/kube-proxy-amd64:v1.7.0 )#登陸harbor,拉取鏡像,更改名稱 docker login -u USER -p PASSWORD http://1.2.3.4 echo '====docker login====='for DOCKER in ${DOCKERS[@]}; dodocker pull ${DOCKER}docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}docker rmi ${DOCKER} doneecho '====docker pull image and change tag=====' #安裝rpm包 rpm -ivh ./*.rpm --nodeps --forceecho '====kubelet, kubeadm, kubectl install=====' # 有的腳本讀取執行文件路徑不一樣 \cp -f /usr/bin/kube* /usr/local/bin/echo '====cp exe file from /usr/bin to /usr/local/bin=====' #將docker文件驅動從systemd更改為cgroupfs,安裝不對,會報錯 sed -i 's/systemd/cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.confecho '====change kubeadm file from systemd to cgroupfs====='systemctl daemon-reloadecho '====daemon-reload=====' #啟動kubelet服務 systemctl start kubelet.serviceecho '====start kubelet=====' #以防萬一,初始化kubeadm并清除以前安裝可能留下的痕跡 kubeadm resetifconfig cni0 down ip link delete cni0 ifconfig flannel.1 down ip link delete flannel.1 rm -rf /var/lib/cni/iptables -X iptables -Z iptables -P INPUT ACCEPT iptables -Fecho '====kubeadm reset=====' echo '====kube master setup finished====='?
從節點加入
kubeadm join --token TOKEN MASTER-IP-ADDRESS:6443?
*這個token可通過在主節點上運行kubeadm token list獲得
從節點加入確認
在主節點上運行kubectl get nodes(從節點上也可以運行,但要先獲取認證文件)
?
擴展功能安裝
基于traefik的ingress功能安裝
A, 下載traefik最新版本(略)
B, 寫traefik-ds.yaml配置文件
apiVersion: extensions/v1beta1 kind: DaemonSet metadata:name: traefik-ingress-lbnamespace: kube-systemlabels:k8s-app: traefik-ingress-lb spec:template:metadata:labels:k8s-app: traefik-ingress-lbname: traefik-ingress-lbspec:terminationGracePeriodSeconds: 60hostNetwork: truerestartPolicy: Alwayscontainers:- image: traefik:latestimagePullPolicy: IfNotPresentname: traefik-ingress-lbresources:limits:cpu: 200mmemory: 30Mirequests:cpu: 100mmemory: 20Miports:- name: httpcontainerPort: 80hostPort: 80- name: admincontainerPort: 8580args:- --web- --web.address=:8580- --kubernetes?
C, 寫traefik-ing.yaml配置文件
apiVersion: extensions/v1beta1 kind: Ingress metadata:name: traefik-ingressnamespace: kube-system spec:rules:- host: cb.exmaple.comhttp:paths:- path: /backend:serviceName: tomcat-dmservicePort: 8087- host: cn.example.cnhttp:paths:- path: /backend:serviceName: nginx-dmservicePort: 8088?
D, 應用這兩個配置文件
Kubectl apply –f traefik-ds.yamlKubectl apply –f traefik- ing.yaml?
E,? 測試,訪問從節點8580端口。
?
附錄
如何曲線獲取google上的docker鏡像
*見本blog以前的帖子
Kubernetes大版本與各個組件版本的對應關系
?
Not end
轉載于:https://www.cnblogs.com/aguncn/p/7228792.html
總結
以上是生活随笔為你收集整理的通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国电信天翼宽带wifi网络怎么设置 天
- 下一篇: 想办法解决window刷新的问题