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

[经验分享] 在CENTOS7下安装kubernetes填坑教程(原创)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-1-10 08:44:57 | 显示全部楼层 |阅读模式
  kubernetes(以下简称“k8s”)目前是公认的最先进的容器集群管理工具,在1.0版本发布后,k8s的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreosrancher等,诸多提供公有云服务的厂商在提供容器服务时也都基于k8s做二次开发来提供基础设施层的支撑,比如华为。可以说k8s也是Docker进军容器集群管理和服务编排领域最为强劲的竞争对手。现在的Red Hat centos7的用户,已经可以使用熟悉的yum来直接安装k8s,但是真要安装起来,还是有相当多的坑要踩,本文就主要来帮助大家填平这些大坑!!!
由于k8s涉及到很多组件,关于组件的学习,网上的教程很多,但是还是推荐大家到官网上去学习。http://kubernetes.io/docs/tutorials/

一、环境搭建
在k8s中,主机只有两种角色master和nodes。我这里准备了3台centos7主机,其中一台既是master也是nodes,另外两台做nodes。
master安装的组件有:
  • docker
  • etcd       可以理解为是k8s的数据库,存储所有节点、pods、网络信息
  • kube-proxy    提供service服务的基础组件
  • kubelet    管理k8s节点的组件,因为这台master同时也是nodes,所以也要安装
  • kube-apiserver   k8s提供API的接口,是整个k8s的核心
  • kube-controller-manager 管理分配资源的组件
  • kube-scheduler    调度资源的组件
  • flanneld     整个k8s的网络组件

nodes安装的组件有:
  • docker
  • kube-proxy
  • kubelet
  • flanneld

接下来就是各节点网络的搭建,修改/etc/hosts,保证每台主机的hosts表一致,如下所示:
echo “192.168.128.160 centos-master
192.168.128.161 centos-minion-1
192.168.128.162 centos-minion-2”>> /etc/hosts
最后,记得关闭各节点的SElinux,避免不必要的问题。防火墙也要关闭,避免与docker容器内部的firewall冲突。
[iyunv@centos-master ~]# systemctl stop firewalld
[iyunv@centos-master ~]# systemctl disable firewalld

二、开始安装
1.首先在所以节点添加k8s组件下载的yum源,如下所示:
cat <<EOF> /etc/yum.repos.d/virt7-docker-common-release.repo <<-'EOF'
[virt7-docker-common-release]
name=virt7-docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=0
EOF
然后执行yum -y update
2.接下来就开始在各个节点上面安装k8s组件了。
master:
yum install -y docker etcd  kube-proxy kubelet  kube-apiserver  kube-controller-manage kube-scheduler flanneld
nodes:
yum install -y etcd  kube-proxy kubelet flanneld
安装完毕后可以到/etc/kubernetes下面查看对应的配置文件,接下来我们开始配置这些配置文件。此处有个坑,因为我们后面会安装k8s的ui,但是使用k8s的ui必须使用证书的认证,而使用默认的/etc/kubernetes/apiserver配置文件无法正常的启用此功能(我试了很多次没有成功,有成功的可以告知我),这里对于kube-apiserver和kube-controller-manage这两个组件我才用CLI的方式。
kube-apiserver:
/usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://centos-master:2379 --address=0.0.0.0 --port=8080 --kubelet-port=10250 --allow-privileged=true --service-cluster-ip-range=10.254.0.0/16 --admission-control=ServiceAccount --insecure-bind-address=0.0.0.0 --client-ca-file=/root/security/ca.crt --tls-cert-file=/root/security/server.crt --tls-private-key-file=/root/security/server.key --basic-auth-file=/root/security/basic_auth.csv --secure-port=443 &>> /var/log/kubernetes/kube-apiserver.log &
kube-controller-manage:
/usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://centos-master:8080 --root-ca-file=/root/security/ca.crt --service-account-private-key-file=/root/security/server.key & >>/var/log/kubernetes/kube-controller-manage.log &
大家有注意看到我这里在/root/security下指定的私钥和数字证书,这里我们还没有生成,所以先不要直接敲入以上的命令,我们先配置其它的配置文件。
etcd:
编辑/etc/etcd/etcd.conf
ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
flanneld:
编辑/etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://centos-master:2379"
FLANNEL_ETCD_PREFIX="/kube-centos/network"(此处是配置flannel网络的密钥,同一网络配置相同即可)
FLANNEL_OPTIONS="--iface=eno16777736"(此处填写的实际物理网卡的地址,可以用ip a命令查看,我的是eno16777736)
##etcdctl mkdir /kube-centos/network
##etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }"
注册flannet网络到etcd中

kubelet:
编辑/etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=centos-master"
KUBELET_API_SERVER="--api-servers=http://centos-master:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
config:
编辑/etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_ETCD_SERVERS="--etcd-servers=http://centos-master:2379"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://centos-master:8080"
根据我们上面提到的master、nodes安装的组件,在master和nodes上面修改相关的配置文件,config配置文件最好都修改。
接着我们来生成上面提到生成密钥和数字证书,在master节点创建security目录
mkdir -p /root/security
cd /root/security
相关证书文件,说明如下:
文件作用
ca.key自己生成的CA的私钥,用于模拟一个CA
ca.crt用自己的私钥自签名的CA证书
server.keyapi server的私钥,用于配置api server的https
server.csrapi server的证书请求文件,用于请求api server的证书
server.crt用自己模拟的CA签发的api server的证书,用于配置api server的https
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=ph_ccnp" -days 10000 -out ca.crt
openssl genrsa -out server.key 2048
echo subjectAltName=IP:10.254.0.1 > extfile.cnf
##10.254.0.1集群网络下mater地址,可以通过命令查看
##kubectl get services --all-namespaces |grep 'default'|grep 'kubernetes'|grep '443'|awk ##'{print $3}',因为集群还没有启动,所以查看不到这个地址,可以先添加个错的,到时候启动集群以后再修改
openssl req -new -key server.key -subj "/CN=ph_ccnp" -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out server.crt -days 10000

3.启动服务
master节点:
/usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://centos-master:2379 --address=0.0.0.0 --port=8080 --kubelet-port=10250 --allow-privileged=true --service-cluster-ip-range=10.254.0.0/16 --admission-control=ServiceAccount --insecure-bind-address=0.0.0.0 --client-ca-file=/root/security/ca.crt --tls-cert-file=/root/security/server.crt --tls-private-key-file=/root/security/server.key --basic-auth-file=/root/security/basic_auth.csv --secure-port=443 &>> /var/log/kubernetes/kube-apiserver.log &

/usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://centos-master:8080 --root-ca-file=/root/security/ca.crt --service-account-private-key-file=/root/security/server.key & >>/var/log/kubernetes/kube-controller-manage.log &

for SERVICES in etcd kube-proxy kube-scheduler flanneld; do
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES
done


nodes节点:
for SERVICES in kube-proxy kubelet flanneld docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
等到服务启动以后,在master上面输入kubectl get nodes
[iyunv@centos-master kubernetes]# kubectl get nodes
NAME              STATUS    AGE
centos-master     Ready     5d
centos-minion-1   Ready     12d
centos-minion-2   Ready     12d
现在整个集群就已经安装成功了!!

4.安装dashboard
首先,我们要下载dashboard的镜像,由于我大中华局域网的存在,导致google官方给的kubernetes-dashboard-amd64:v1.5.0镜像无法下载(坑爹!!),我们这里先去docker.io站点pull一个v1.4.0版本的镜像
docker pull docker.io/sailsxu/kubernetes-dashboard-amd64:v1.4.0
然后下载官网给的自动部署文件
curl  https://rawgit.com/kubernetes/da ... etes-dashboard.yaml -o kubernetes-dashborad.yaml
此处需修改三处:
1.image: docker.io/sailsxu/kubernetes-dashboard-amd64:v1.4.0
2.imagePullPolicy: Always  把此行取消,否则它总是去register取镜像
3.# - --apiserver-host=http://my-address:port,修改为- --apiserver-host=http://centos-master:8080
然后我们执行
kubectl create -f kubernetes-dashborad.yaml
kubectl get po --namespace=kube-system
NAME                                                              READY STATUS RESTARTS AGE
kubernetes-dashboard-2963774231-uzsul       1/1    Running 1              15h
kubectl --namespace=kube-system get po -o wide
NAME READY                              STATUS    RESTARTS      AGE            IP       NODE
kubernetes-dashboard-2963774231-uzsul 1/1 Running  15h 172.30.9.2 centos-minion-2
我们可以看到现在dashboard已经运行在centos-minion-2节点上,我们在浏览器地址栏查看
https://192.168.128.160/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard/#/workload?namespace=_all
到这里dashboard就已经安装完毕了。
此教程不涉及k8s的基础部分,如果有时间,我会再写一些基础部分的知识!关于k8s的ui如何使用,我也会在以后的教程中及时更新!!



运维网声明 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-326288-1-1.html 上篇帖子: kubernetes 1.5.1, 配置文档--无障碍安装方法 下篇帖子: Kubernetes集群测试环境搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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