kubernetes(以下简称“k8s”)目前是公认的最先进的容器集群管理工具,在1.0版本发布后,k8s的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreos、rancher等,诸多提供公有云服务的厂商在提供容器服务时也都基于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冲突。

[root@centos-master ~]# systemctl stop firewalld
[root@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-p_w_picpath=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.key api server的私钥,用于配置api server的https
server.csr api 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

[root@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/dashboard/master/src/deploy/kubernetes-dashboard.yaml -o kubernetes-dashborad.yaml

此处需修改三处:

1.p_w_picpath: docker.io/sailsxu/kubernetes-dashboard-amd64:v1.4.0

2.p_w_picpathPullPolicy: 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如何使用,我也会在以后的教程中及时更新!!

转载于:https://blog.51cto.com/phccnp/1890510

在CENTOS7下安装kubernetes填坑教程(原创)相关推荐

  1. centos7下安装网易云音乐教程及相关依赖关系解决

    参考资料: https://github.com/caojx-git/learn/blob/master/notes/linux/CentOS7%E4%B8%AD%E5%AE%89%E8%A3%85% ...

  2. CENTOS7下安装oracle 11g完整教程

    目录 一.安装步骤图解 1.创建安装Oracle需要的系统组和用户 2.创建安装Oracle软件所需要的目录及赋权 3.配置系统内核参数值 4.修改limits.conf文件 5.配置安装oracle ...

  3. centos7 下google Kubernetes(k8s)集群安装部署

    centos7 下google Kubernetes(k8s)集群安装部署 简介 安装环境 安装前准备 ECTD集群配置 命令含义: master节点配置 1.安装kubernetes和etcd 2. ...

  4. CentOS7下安装Ceph供Kubernetes使用

    CentOS7下安装Ceph供Kubernetes使用 CentOS7下安装Ceph供Kubernetes使用 1. 环境说明 2. Ceph部署准备 2.1 节点规划 2.2 添加yum源 2.3 ...

  5. 在CentOS7下安装MySQL8数据库

    在CentOS7下安装MySQL8数据库 一 准备Linux环境 默认已安装:Linux虚拟机+ CentOS 笔者用的是如下版本: VMware15:VMware-workstation-full- ...

  6. CentOS7环境安装Kubernetes四部曲之二:配置模板和安装master

    本文是<CentOS7环境安装Kubernetes四部曲>系列的第二篇,前一篇<CentOS7环境安装Kubernetes三部曲:标准化机器准备>我们把机器准备好了,并且做了必 ...

  7. Centos7下安装Docker

    Centos7下安装Docker(详细的新手装逼教程) 参考: https://www.cnblogs.com/qgc1995/archive/2018/08/29/9553572.html 早就听说 ...

  8. linux 安装redis2.8.3,centos7下安装Redis2.8版本步骤

    Redis 简介 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zs ...

  9. CentOS7下安装nginx1.99

    文章目录 1.前期准备 1.1 安装gcc 1.2 安装其他依赖包 1.3 下载安装包 2.安装nginx 2.1 解压nginx 2.2 编译安装 2.3 启动 2.4 常用命令 3.Nginx配置 ...

最新文章

  1. 写一个脚本定时自动备份mysql到指定目录
  2. linux常用网络命令详解,linux网络命令详解(鸟哥)
  3. php5 mysql 源_CentOS 7.4使用yum源安装MySQL5.7
  4. IIS添加MIME类型支持 rmvb 等播放
  5. 一元n次多项式--模拟--洛谷P1067
  6. java实训文献_java实训论文参考文献写作指导
  7. 基于eNSP的校园网设计的仿真模拟
  8. cad高程标注插件lisp_CADLISP程序,标高修改,管网标注,等一堆
  9. Excel函数-数据库函数大全(Excel Database Functions)
  10. java adminlte 使用_AdminLTE框架基础布局使用
  11. sdn的用处_什么是SDN?SDN有什么优势?
  12. 2022前端面试系列——Vue面试题
  13. 咸鱼Maya笔记—初识Maya 2019
  14. element plus 部分组件转英文问题
  15. 教育行业是永恒不过时的常青藤行业!
  16. sel在c语言,iOS 你所不知道的SEL
  17. 套接字sockets
  18. [BZOJ1271][BeijingWc2008][二分]秦腾与教学评估
  19. 两个天才黑客:一人在牢狱之灾后退隐江湖,一人蜕变成阿里巴巴“守护神”!...
  20. 东大18秋计算机网络在线作业1答案,东大18秋学期《计算机辅助数控编程》在线作业1辅导资料...

热门文章

  1. Go 变量及基本数据类型3
  2. Difference Between InnoDb and MyISAM(个人觉着是好文章,简单易懂,推荐看)
  3. golang 编写的邮件客户端
  4. word保存时标题变成黑框(mac版本)
  5. 前台html调用函数 格式化输出
  6. 列索引对SharePoint大列表性能的影响
  7. 字符串的指针和指向字符串的指针变量
  8. 前阿里资深运营王殿进:SaaS产品经理所面临的苦恼
  9. 面试题: Vue中的 computed 和 watch的区别
  10. springmvc+jsp引用本地图片文件