资讯专栏INFORMATION COLUMN

利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)

邱勇 / 3103人阅读

摘要:最近被业务折腾的死去活来,实在没时间发帖,花了好多个晚上才写好这篇帖子,后续会加油的利用技术栈打造个人私有云系列文章目录利用技术栈打造个人私有云连载之初章利用技术栈打造个人私有云连载之集群搭建利用技术栈打造个人私有云连载之环境理解和练手利用


最近被业务折腾的死去活来,实在没时间发帖,花了好多个晚上才写好这篇帖子,后续会加油的!


【利用K8S技术栈打造个人私有云系列文章目录】

利用K8S技术栈打造个人私有云(连载之:初章)

利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)

利用K8S技术栈打造个人私有云(连载之:K8S环境理解和练手)

利用K8S技术栈打造个人私有云(连载之:基础镜像制作与实验)

利用K8S技术栈打造个人私有云(连载之:资源控制研究)

利用K8S技术栈打造个人私有云(连载之:私有云客户端打造)

</>复制代码

  1. 注: 本文首发于 My 公众号 CodeSheep ,可 长按扫描 下面的 小心心 来订阅 ↓ ↓ ↓


环境介绍

</>复制代码

  1. 玩集群嘛,当然要搞几台机器做节点!无赖自己并没有性能很强劲的多余机器,在家里翻箱倒柜,找出了几台破旧的本子,试试看吧,与其垫桌脚不如拿出来遛遛弯...

总体环境安排如下图所示:

各部分简介如下:

Master节点 ( 一台08年买的Hedy笔记本 Centos7.3 64bit )

docker

etcd

flannel

kube-apiserver

kube-scheduler

kube-controller-manager

Slave节点 ( 一台二手Thinkpad T420s Centos7.3 64bit )

docker

flannel

kubelet

kube-proxy

Client节点( 一台12年的Sony Vaio SVS13 Win7 Ultimate)

客户端嘛,毕竟甲方,不需要安装啥东西,有个ssh客户端能连到master和slave节点就OK

Docker镜像仓库

一般企业内部应用的话,其会搭建自己的docker registry,用作镜像仓库,我这里就直接用Docker Gub作为镜像仓库,自己不搭建了(其实主要是没机子啊!)

Wireless Router (雷猴子家的小米路由器3)

最好能穿墙,因为我家路由器放在客厅,但我实验是在卧室里做的啊!

</>复制代码

  1. 各部分全部都是由wifi进行互联,我个人不太喜欢一大堆线绕来绕去

环境准备

先设置master节点和所有slave节点的主机名

master上执行:

</>复制代码

  1. hostnamectl --static set-hostname k8s-master

slave上执行:

</>复制代码

  1. hostnamectl --static set-hostname k8s-node-1

修改master和slave上的hosts

在master和slave的/etc/hosts文件中均加入以下内容:

</>复制代码

  1. 192.168.31.166 k8s-master
  2. 192.168.31.166 etcd
  3. 192.168.31.166 registry
  4. 192.168.31.199 k8s-node-1

关闭master和slave上的防火墙

</>复制代码

  1. systemctl disable firewalld.service
  2. systemctl stop firewalld.service

部署Master节点

master节点需要安装以下组件:

etcd

flannel

docker

kubernets

下面按顺序阐述

1. etcd安装

安装命令:yum install etcd -y

编辑etcd的默认配置文件/etc/etcd/etcd.conf

</>复制代码

  1. # [member]
  2. ETCD_NAME=master
  3. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  4. #ETCD_WAL_DIR=""
  5. #ETCD_SNAPSHOT_COUNT="10000"
  6. #ETCD_HEARTBEAT_INTERVAL="100"
  7. #ETCD_ELECTION_TIMEOUT="1000"
  8. #ETCD_LISTEN_PEER_URLS="http://localhost:2380"
  9. ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
  10. #ETCD_MAX_SNAPSHOTS="5"
  11. #ETCD_MAX_WALS="5"
  12. #ETCD_CORS=""
  13. #
  14. #[cluster]
  15. #ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
  16. # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
  17. #ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
  18. #ETCD_INITIAL_CLUSTER_STATE="new"
  19. #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  20. ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379,http://etcd:4001"
  21. #ETCD_DISCOVERY=""
  22. #ETCD_DISCOVERY_SRV=""
  23. #ETCD_DISCOVERY_FALLBACK="proxy"
  24. #ETCD_DISCOVERY_PROXY=""
  25. #ETCD_STRICT_RECONFIG_CHECK="false"
  26. #ETCD_AUTO_COMPACTION_RETENTION="0"
  27. #ETCD_ENABLE_V2="true"
  28. #
  29. #[proxy]
  30. #ETCD_PROXY="off"
  31. #ETCD_PROXY_FAILURE_WAIT="5000"
  32. #ETCD_PROXY_REFRESH_INTERVAL="30000"
  33. #ETCD_PROXY_DIAL_TIMEOUT="1000"
  34. #ETCD_PROXY_WRITE_TIMEOUT="5000"
  35. #ETCD_PROXY_READ_TIMEOUT="0"
  36. #
  37. #[security]
  38. #ETCD_CERT_FILE=""
  39. #ETCD_KEY_FILE=""
  40. #ETCD_CLIENT_CERT_AUTH="false"
  41. #ETCD_TRUSTED_CA_FILE=""
  42. #ETCD_AUTO_TLS="false"
  43. #ETCD_PEER_CERT_FILE=""
  44. #ETCD_PEER_KEY_FILE=""
  45. #ETCD_PEER_CLIENT_CERT_AUTH="false"
  46. #ETCD_PEER_TRUSTED_CA_FILE=""
  47. #ETCD_PEER_AUTO_TLS="false"
  48. #
  49. #[logging]
  50. #ETCD_DEBUG="false"
  51. # examples for -log-package-levels etcdserver=WARNING,security=DEBUG
  52. #ETCD_LOG_PACKAGE_LEVELS=""
  53. #
  54. #[profiling]
  55. #ETCD_ENABLE_PPROF="false"
  56. #ETCD_METRICS="basic"
  57. #
  58. #[auth]
  59. #ETCD_AUTH_TOKEN="simple"

启动etcd并验证

首先启动etcd服务

</>复制代码

  1. systemctl start etcd // 启动etcd服务

再获取etcd的健康指标看看:

</>复制代码

  1. etcdctl -C http://etcd:2379 cluster-health
  2. etcdctl -C http://etcd:4001 cluster-health

2. flannel安装

安装命令:yum install flannel

配置flannel:/etc/sysconfig/flanneld

</>复制代码

  1. # Flanneld configuration options
  2. # etcd url location. Point this to the server where etcd runs
  3. FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"
  4. # etcd config key. This is the configuration key that flannel queries
  5. # For address range assignment
  6. FLANNEL_ETCD_PREFIX="/atomic.io/network"
  7. # Any additional options that you want to pass
  8. #FLANNEL_OPTIONS=""

配置etcd中关于flannel的key

</>复制代码

  1. etcdctl mk /atomic.io/network/config "{ "Network": "10.0.0.0/16" }"

启动flannel并设置开机自启

</>复制代码

  1. systemctl start flanneld.service
  2. systemctl enable flanneld.service

3. docker安装

该部分网上教程太多了,主要步骤如下

安装命令:yum install docker -y

开启docker服务:service docker start

设置docker开启自启动:chkconfig docker on

4. kubernets安装

k8s的安装命令很简单,执行:

</>复制代码

  1. yum install kubernetes

但k8s需要配置的东西比较多,正如第一节“环境介绍”中提及的,毕竟master上需要运行以下组件:

kube-apiserver

kube-scheduler

kube-controller-manager

下面详细阐述:

配置/etc/kubernetes/apiserver文件

</>复制代码

  1. ###
  2. # kubernetes system config
  3. #
  4. # The following values are used to configure the kube-apiserver
  5. #
  6. # The address on the local server to listen to.
  7. KUBE_API_ADDRESS="--address=0.0.0.0"
  8. # The port on the local server to listen on.
  9. KUBE_API_PORT="--port=8080"
  10. # Port minions listen on
  11. KUBELET_PORT="--kubelet-port=10250"
  12. # Comma separated list of nodes in the etcd cluster
  13. KUBE_ETCD_SERVERS="--etcd-servers=http://etcd:2379"
  14. # Address range to use for services
  15. KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
  16. # default admission control policies
  17. # KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
  18. KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
  19. # Add your own!
  20. KUBE_API_ARGS=""

配置/etc/kubernetes/config文件

</>复制代码

  1. ###
  2. # kubernetes system config
  3. #
  4. # The following values are used to configure various aspects of all
  5. # kubernetes services, including
  6. #
  7. # kube-apiserver.service
  8. # kube-controller-manager.service
  9. # kube-scheduler.service
  10. # kubelet.service
  11. # kube-proxy.service
  12. # logging to stderr means we get it in the systemd journal
  13. KUBE_LOGTOSTDERR="--logtostderr=true"
  14. # journal message level, 0 is debug
  15. KUBE_LOG_LEVEL="--v=0"
  16. # Should this cluster be allowed to run privileged docker containers
  17. KUBE_ALLOW_PRIV="--allow-privileged=false"
  18. # How the controller-manager, scheduler, and proxy find the apiserver
  19. KUBE_MASTER="--master=http://k8s-master:8080"

启动k8s各个组件

</>复制代码

  1. systemctl start kube-apiserver.service
  2. systemctl start kube-controller-manager.service
  3. systemctl start kube-scheduler.service

设置k8s各组件开机启动

</>复制代码

  1. systemctl enable kube-apiserver.service
  2. systemctl enable kube-controller-manager.service
  3. systemctl enable kube-scheduler.service

部署Slave节点

slave节点需要安装以下组件:

flannel

docker

kubernetes

下面按顺序阐述:

1. flannel安装

安装命令:yum install flannel

配置flannel:/etc/sysconfig/flanneld

</>复制代码

  1. # Flanneld configuration options
  2. # etcd url location. Point this to the server where etcd runs
  3. FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"
  4. # etcd config key. This is the configuration key that flannel queries
  5. # For address range assignment
  6. FLANNEL_ETCD_PREFIX="/atomic.io/network"
  7. # Any additional options that you want to pass
  8. #FLANNEL_OPTIONS=""

启动flannel并设置开机自启

</>复制代码

  1. systemctl start flanneld.service
  2. systemctl enable flanneld.service

2. docker安装

参考前文master节点上部署docker过程,此处不再赘述

3. kubernetes安装

安装命令:yum install kubernetes

不同于master节点,slave节点上需要运行kubernetes的如下组件:

kubelet

kubernets-proxy

下面详细阐述要配置的东西:

配置/etc/kubernetes/config

</>复制代码

  1. ###
  2. # kubernetes system config
  3. #
  4. # The following values are used to configure various aspects of all
  5. # kubernetes services, including
  6. #
  7. # kube-apiserver.service
  8. # kube-controller-manager.service
  9. # kube-scheduler.service
  10. # kubelet.service
  11. # kube-proxy.service
  12. # logging to stderr means we get it in the systemd journal
  13. KUBE_LOGTOSTDERR="--logtostderr=true"
  14. # journal message level, 0 is debug
  15. KUBE_LOG_LEVEL="--v=0"
  16. # Should this cluster be allowed to run privileged docker containers
  17. KUBE_ALLOW_PRIV="--allow-privileged=false"
  18. # How the controller-manager, scheduler, and proxy find the apiserver
  19. KUBE_MASTER="--master=http://k8s-master:8080"

配置/etc/kubernetes/kubelet

</>复制代码

  1. ###
  2. # kubernetes kubelet (minion) config
  3. # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
  4. KUBELET_ADDRESS="--address=0.0.0.0"
  5. # The port for the info server to serve on
  6. # KUBELET_PORT="--port=10250"
  7. # You may leave this blank to use the actual hostname
  8. KUBELET_HOSTNAME="--hostname-override=k8s-node-1"
  9. # location of the api-server
  10. KUBELET_API_SERVER="--api-servers=http://k8s-master:8080"
  11. # pod infrastructure container
  12. KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
  13. # Add your own!
  14. KUBELET_ARGS=""

启动kube服务

</>复制代码

  1. systemctl start kubelet.service
  2. systemctl start kube-proxy.service

设置k8s组件开机自启

</>复制代码

  1. systemctl enable kubelet.service
  2. systemctl enable kube-proxy.service

至此为止,k8s集群的搭建过程就完成了,下面来验证一下集群是否搭建成功了

验证集群状态

查看端点信息:kubectl get endpoints

查看集群信息:kubectl cluster-info

获取集群中的节点状态: kubectl get nodes

OK,节点已经就绪,可以在上面做实验了!


参考文献

https://www.kubernetes.org.cn/


后记

作者更多的原创文章在此,欢迎观赏

My Personal Blog

作者更多的SpringBt实践文章在此:

Spring Boot应用监控实战

SpringBoot应用部署于外置Tomcat容器

ElasticSearch搜索引擎在SpringBt中的实践

初探Kotlin+SpringBoot联合编程

Spring Boot日志框架实践

SpringBoot优雅编码之:Lombok加持


如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:

利用K8S技术栈打造个人私有云 连载文章

从一份配置清单详解Nginx服务器配置

Docker容器可视化监控中心搭建

利用ELK搭建Docker容器化应用日志中心

RPC框架实践之:Apache Thrift

RPC框架实践之:Google gRPC

微服务调用链追踪中心搭建

Docker容器跨主机通信

Docker Swarm集群初探

高效编写Dockerfile的几条准则



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32611.html

相关文章

  • 利用K8S技术打造个人私有连载K8S资源控制)

    摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S...

    Reducto 评论0 收藏0
  • 利用K8S技术打造个人私有连载K8S资源控制)

    摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S...

    Render 评论0 收藏0
  • 利用K8S技术打造个人私有连载私有客户端打造

    摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...

    Jingbin_ 评论0 收藏0
  • 利用K8S技术打造个人私有连载私有客户端打造

    摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...

    shiina 评论0 收藏0
  • 利用K8S技术打造个人私有连载K8S环境理解和练手)

    摘要:常见的和等都是属于某一个的默认是,而等则不属于任何。其实其的命令和上面都差不多,这里不一一列出了创建查看启动情况是一个定义了一组的策略的抽象,可以理解为抽象到用户层的一个宏观服务。其实这个概念在集群里也有,可以参照理解。 showImg(https://segmentfault.com/img/remote/1460000013229549); 【利用K8S技术栈打造个人私有云系列文...

    kid143 评论0 收藏0
  • 利用K8S技术打造个人私有连载K8S环境理解和练手)

    摘要:常见的和等都是属于某一个的默认是,而等则不属于任何。其实其的命令和上面都差不多,这里不一一列出了创建查看启动情况是一个定义了一组的策略的抽象,可以理解为抽象到用户层的一个宏观服务。其实这个概念在集群里也有,可以参照理解。 showImg(https://segmentfault.com/img/remote/1460000013229549); 【利用K8S技术栈打造个人私有云系列文...

    30e8336b8229 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<