kubernetes环境搭建(中)

基础集群部署 - kubernetes-simple

一、部署ETCD(主节点)

简介:ETCD是 CoreOS 团队于 2013 年 6 月发起的,是一个开源的、高可用的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现,基于 Go 语言实现(Apache ServiceComb微服务架构使用它作为注册中心--华为CSE前身)。它跟zookeeper类似,但etcd是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeeper的paxos简单。

  • 简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用。
  • 安全:可选SSL客户认证机制。
  • 快速:每个实例每秒支持一千次写操作。
  • 可信:使用Raft算法充分实现了分布式系统数据的可用性和一致性。

2379端口用于外部通信,2380用于内部通信。

kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运行的pod,deployment,service等等。都需要持久化。etcd就是它的数据中心。生产环境中为了保证数据中心的高可用和数据的一致性,一般会部署最少三个节点。我们这里以学习为主就只在主节点部署一个实例。 

注:前提是你在生成配置的时候填写了自己的etcd endpoint。

  • 部署:etcd的二进制文件和服务的配置我们都已经准备好,现在的目的就是把它做成系统服务并启动。(这个是要在主节点操作的,在node51上)
#把服务配置文件copy到系统服务目录
cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/
#enable服务
systemctl enable etcd.service
#创建工作目录(保存数据的地方)
mkdir -p /var/lib/etcd
# 启动服务
service etcd start
# 查看服务日志,看是否有错误信息,确保服务正常
journalctl -f -u etcd.service
# 查看在线的端口2379 2380 
netstat -ntlp 或者 ss -tunlp

  • 查看etcd的配置

WorkingDirectory 工作目录配置文件存在这个路径下
ExecStart 执行的命令
name 名称
listen-client-urls 监听节点
advertise-client-urls 建议其他人访问的地址
data-dir 数据目录

vi /lib/systemd/system/etcd.service 

PS: 有一点很奇怪,别人的ExecStart可以换行,但是我用“/”换行,就会报错:etcd.service lacks both ExecStart= and ExecStop= setting. Refusing.

二、部署APIServer(主节点)

简介:kube-apiserver是Kubernetes最重要的核心组件之一,主要提供以下的功能

  • 提供集群管理的REST API接口,包括认证授权(我们现在没有用到)数据校验以及集群状态变更等
  • 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd)

生产环境为了保证apiserver的高可用一般会部署2+个节点,在上层做一个lb做负载均衡,比如haproxy。由于单节点和多节点在apiserver这一层说来没什么区别,所以我们学习部署一个节点就足够啦

  • 部署:APIServer的部署方式也是通过系统服务。部署流程跟etcd完全一样,不再注释
cp kubernetes-starter/target/master-node/kube-apiserver.service /lib/systemd/system/
systemctl enable kube-apiserver.service
service kube-apiserver start
journalctl -f -u kube-apiserver

  •  重点配置说明vi /lib/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
...
[Service]
#可执行文件的位置
ExecStart=/home/michael/bin/kube-apiserver \
#非安全端口(8080)绑定的监听地址 这里表示监听所有地址
--insecure-bind-address=0.0.0.0 \
#不使用https
--kubelet-https=false \
#kubernetes集群的虚拟ip的地址范围
--service-cluster-ip-range=10.68.0.0/16 \
#service的nodeport的端口范围限制
--service-node-port-range=20000-40000 \
#很多地方都需要和etcd打交道,也是唯一可以直接操作etcd的模块
--etcd-servers=http://192.168.1.102:2379 \
...

三、部署ControllerManager(主节点)

简介:Controller Manager由kube-controller-managercloud-controller-manager组成,是Kubernetes的大脑,它通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态。

  • kube-controller-manager由一系列的控制器组成,像Replication Controller控制副本,Node Controller节点控制,Deployment Controller管理deployment等等。
  • cloud-controller-manager在Kubernetes启用Cloud Provider的时候才需要,用来配合云服务提供商的控制。

controller-manager、scheduler和apiserver 三者的功能紧密相关,一般运行在同一个机器上,我们可以把它们当做一个整体来看,所以保证了apiserver的高可用即是保证了三个模块的高可用。也可以同时启动多个controller-manager进程,但只有一个会被选举为leader提供服务。

  • 部署:通过系统服务方式部署
cp ~/kubernetes-starter/target/master-node/kube-controller-manager.service /lib/systemd/system/
systemctl enable kube-controller-manager.service
service kube-controller-manager start
journalctl -f -u kube-controller-manager

  • 重点配置说明:vi /lib/systemd/system/kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
...
[Service]
ExecStart=/home/michael/bin/kube-controller-manager \
#对外服务的监听地址,这里表示只有本机的程序可以访问它
--address=127.0.0.1 \
#apiserver的url
--master=http://127.0.0.1:8080 \
#服务虚拟ip范围,同apiserver的配置
--service-cluster-ip-range=10.68.0.0/16 \
#pod的ip地址范围
--cluster-cidr=172.20.0.0/16 \
#下面两个表示不使用证书,用空值覆盖默认值
--cluster-signing-cert-file= \
--cluster-signing-key-file= \
...

最后再注意一下:我的ExecStart不能用“/”换行,否则报错:etcd.service lacks both ExecStart= and ExecStop= setting. Refusing.。另外,前面最好用绝对路径的命令,比如:/bin/bash -c "command"

最后,特别感谢zwsapling博主的安装文档: https://www.cnblogs.com/lyzw/p/6016789.html

源码:https://github.com/limingios/msA-docker k8s分支和https://github.com/limingios/kubernetes-starter

发布了382 篇原创文章 · 获赞 306 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/lixinkuan328/article/details/103966363