设为首页 收藏本站
查看: 970|回复: 0

[经验分享] 通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]

[复制链接]

尚未签到

发表于 2018-1-4 23:35:43 | 显示全部楼层 |阅读模式
  参照了网上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>  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 -X  

  
iptables -Z
  

  
iptables -P INPUT ACCEPT
  

  
iptables -F
  

  *默认禁用,通过硬防来控制规则。

主节点安装

上传rpm文件
  将所有涉及的rpm包上传到服务器的一个安装目录(e.g:/root/k8s/)

上传docker镜像
  将前节提到的docker images上传到harbor仓库(harbor-ip-address)

运行初始化前脚本
  生成并运行以下脚本,进行master初始化前安装。(k8s-master-setup_before.sh)
  

#!/bin/bash  

  

  
HARBORPRE
="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[@]}; do
  
docker pull ${DOCKER}
  
docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}
  
docker rmi ${DOCKER}
  
done
  

  
echo '====docker pull image and change tag====='
  
#安装rpm包
  
rpm -ivh ./*.rpm --nodeps --force
  

  
echo '====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.conf
  

  
echo '====change kubeadm file from systemd to cgroupfs====='
  

  
systemctl daemon-reload
  

  
echo '====daemon-reload====='
  
#启动kubelet服务
  
systemctl start kubelet.service
  

  
echo '====start kubelet====='
  
#以防万一,初始化kubeadm并清除以前安装可能留下的痕迹
  
kubeadm reset
  

  
ifconfig 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 -F
  

  

  

  
echo '====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/bash  

  

mkdir -p $HOME/.kube  
\
cp -f /etc/kubernetes/admin.conf $HOME/.kube/config  

chown $(id -u):$(id -g) $HOME/.kube/config  

  
kubectl 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-namespaces  

  
kubectl get svc --all-namespaces
  


从节点安装

上传rpm文件
  将所有涉及的rpm包上传到服务器的一个安装目录(e.g:/root/k8s/)

运行从节点前置脚本
  生成并运行以下脚本,进行从节点加入前安装。(k8s-node-setup.sh)
  

#!/bin/bash  

  

  
HARBORPRE
="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[@]}; do
  
docker pull ${DOCKER}
  
docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}
  
docker rmi ${DOCKER}
  
done
  

  
echo '====docker pull image and change tag====='
  
#安装rpm包
  
rpm -ivh ./*.rpm --nodeps --force
  

  
echo '====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.conf
  

  
echo '====change kubeadm file from systemd to cgroupfs====='
  

  
systemctl daemon-reload
  

  
echo '====daemon-reload====='
  
#启动kubelet服务
  
systemctl start kubelet.service
  

  
echo '====start kubelet====='
  
#以防万一,初始化kubeadm并清除以前安装可能留下的痕迹
  
kubeadm reset
  

  
ifconfig 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 -F
  

  

  

  
echo '====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-lb
  
namespace: kube-system
  
labels:
  
k8s-app: traefik-ingress-lb
  
spec:
  
template:
  
metadata:
  
labels:
  
k8s-app: traefik-ingress-lb
  
name: traefik-ingress-lb
  
spec:
  
terminationGracePeriodSeconds: 60
  
hostNetwork: true
  
restartPolicy: Always
  
containers:
  
- image: traefik:latest
  
imagePullPolicy: IfNotPresent
  
name: traefik-ingress-lb
  
resources:
  
limits:
  
cpu: 200m
  
memory: 30Mi
  
requests:
  
cpu: 100m
  
memory: 20Mi
  
ports:
  
- name: http
  
containerPort: 80
  
hostPort: 80
  
- name: admin
  
containerPort: 8580
  
args:
  
- --web
  
- --web.address=:8580
  
- --kubernetes
  

  C, 写traefik-ing.yaml配置文件
  

apiVersion: extensions/v1beta1  
kind: Ingress
  
metadata:
  
name: traefik-ingress
  
namespace: kube-system
  
spec:
  
rules:
  
- host: cb.exmaple.com
  
http:
  
paths:
  
- path: /
  
backend:
  
serviceName: tomcat-dm
  
servicePort: 8087
  
- host: cn.example.cn
  
http:
  
paths:
  
- path: /
  
backend:
  
serviceName: nginx-dm
  
servicePort: 8088
  

  D, 应用这两个配置文件
  

Kubectl apply –f traefik-ds.yaml  

  
Kubectl apply –f traefik
- ing.yaml  

  E,  测试,访问从节点8580端口。

附录

如何曲线获取google上的docker镜像
  *见本blog以前的帖子

Kubernetes大版本与各个组件版本的对应关系


Not end

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431720-1-1.html 上篇帖子: kubernetes部署(v1.6)(一) 下篇帖子: Kubernetes – Ingress
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表