搭建 Kubernetes 管理系统

Kubernetes 常见组件

1、master: kubernetes 管理结点 2、apiserver : 提供接口服务,用户通过 apiserver 来管理整个容器集群平台。API Server 负责和 etcd 交互(其他组件不会直接操作 etcd,只有 API Server 这么做),整个 kubernetes 集群的所有的交互都是以 API Server 为核心的。 3、scheduler kubernetes 调度服务 4、Replication Controllers 复制, 保证 pod 的高可用 Replication Controller 是 Kubernetes 系统中最有用的功能,实现复制多个 Pod 副本,往往一个应用需要多个 Pod 来支撑,并且可以保证其复制的副本数,即使副本所调度分配的宿主机出现异常,通过 Replication Controller 可以保证在其它宿主机启用同等数量的 Pod,Replication Controller 可以通过 repcon 模板来创建多个 Pod 副本,同样也可以直接复制已存在 Pod,需要通过 Label selector 来关联。

5、minion : 真正运行容器 container 的物理机, kubernets 中需要很多 minion 机器,来提供运算 6、container : 容器 ,可以运行服务和程序 7、 Pod :在 Kubernetes 系统中,调度的最小颗粒不是单纯的容器,而是抽象成一个 Pod,Pod是一个可以被创建、销毁、调度、管理的最小的部署单元;pod 中可以包括一个或一组容器 8、Kube_proxy 代理做端口转发,相当于 LVS-NAT 模式中的负载调度器 Proxy 解决了同一宿主机,相同服务端口冲突的问题,还提供了对外服务的能力,Proxy 后端使用了随机、轮循负载均衡算法。

9、etcd etcd 存储 kubernetes 的配置信息, 可以理解为是 k8s 的数据库,存储着 k8s 容器云平台中所有节点、pods、网络等信息。Linux 系统中/etc 目录作用是存储配置文件,所以 etcd (daemon) 是一个存储配置文件的后台服务。

10、Services : Services 是 Kubernetes 最外围的单元,通过虚拟一个访问 IP 及服务端口,可以访问我们定义好的 Pod 资源,目前的版本是通过 iptables 的 nat 转发来实现,转发的目标端口为 Kube_proxy 生成的随机端口。

11、Labels 标签 Labels 是用于区分 Pod、Service、Replication Controller 的 key/value 键值对,仅使用在 Pod、Service、 Replication Controller 之间的关系识别,但对这些单元本身进行操作时得使用 name标签。 12、 Deployment Kubernetes Deployment 用于更新 Pod 和 Replica Set(下一代的 Replication Controller)的 方法,你可以在 Deployment 对象中只描述你所期望的理想状态(预期的运行状态),Deployment 控制器会将现在的实际状态转换成期望的状态。例如,将所有的 webapp:v1.0.9 升级成 webapp:v1.1.0,只需创建一个 Deployment,Kubernetes 会按照 Deployment 自动进行升级。通过 Deployment 可以用来创建新的资源。Deployment 可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。

13、Kubelet 命令 : Kubelet 和 Kube-proxy 都运行在 minion 节点上。 Kube-proxy 实现 Kubernetes 网络相关内容。 Kubelet 命令管理 Pod、Pod 中容器及容器的镜像和卷等信息。

各组件之间的关系

1、Kubernetes的架构由一个master和多个minion组成,master通过api提供服务,接受kubectl的请求来调度管理整个集群; kubectl: 是 k8s 平台的一个管理命令

2、Replication controller 定义了多个 pod 或者容器需要运行,如果当前集群中运行的 pod 或容器达不到配置的数量,replication controller 会调度容器在多个 minion 上运行,保证集群中的 pod 数量

3、service 则定义真实对外提供的服务,一个 service 会对应后端运行的多个 container

4、Kubernetes 是个管理平台,minion 上的kube-proxy 拥有提供真实服务公网 IP,客户端访问kubernetes 中提供的服务,是直接访问到 kube-proxy 上的

5、在 Kubernetes 中 pod 是一个基本单元,一个 pod 可以是提供相同功能的多个 container,这些容器会被部署在同一个 minion 上;minion 是运行 Kubelet 中容器的物理机;minion 接受 master的指令创建 pod 或者容器

搭建 Kubernetes 系统

minion : 真正运行容器 container 的物理机, kubernets 中需要很多 minion 机器,来提供运算

ip地址主机名系统
192.168.88.132mastercentos7.6 4G4核
192.168.88.133etcdcentos7.6 4G4核
192.168.88.134minion1centos7.6 2G4核
192.168.88.135minion2centos7.6 2G4核

[root@master ~]# yum install -y kubernetes flannel ntp [root@etcd ~]# yum install -y kubernetes etcd flannel ntp [root@minion1 ~]# yum install -y kubernetes flannel ntp [root@minion2 ~]# yum install -y kubernetes flannel ntp

###修改所有节点的hosts文件 cat /etc/hosts 192.168.88.132 master 192.168.88.133 etcd 192.168.88.134 minion1 192.168.88.135 minion2

配置 etcd(etcd是一个存储配置文件的后台服务)

cat /etc/etcd/etcd.conf
#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
#ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.88.133:2379"   #增加修改etcd对外服务监听地址
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd"   #修改etcd 节点名称
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.88.133:2379"  #修改etcd对外客户端的地址
[root@etcd ~]# vim /etc/etcd/etcd.conf
[root@etcd ~]# systemctl start etcd
[root@etcd ~]# systemctl status etcd
[root@etcd ~]# netstat -antup | grep 2379
tcp        0      0 192.168.88.133:2379     0.0.0.0:*               LISTEN      47843/etcd          
tcp        0      0 192.168.88.133:2379     192.168.88.133:34680    ESTABLISHED 47843/etcd          
tcp        0      0 192.168.88.133:34680    192.168.88.133:2379     ESTABLISHED 47843/etc
[root@etcd ~]# etcdctl member list
8e9e05c52164694d: name=etcd peerURLs=http://localhost:2380 clientURLs=http://192.168.88.133:2379 isLeader=true

配置 master(kubernetes 管理结点)

[root@master ~]# tail -5 /etc/kubernetes/config     ##更改master的ip
# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=false"
​
# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://192.168.88.132:8080"   ####修改最后一行master的监听的地址
  
[root@master ~]# vim /etc/kubernetes/apiserver  ###提供接口服务,用户通过 apiserver 来管理整个容器集群平台
改:8 KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"   
为:8 KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"   ###修改为监听所有端口
改:17 KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
为:17 KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.88.133:2379"  ##设定etcd的服务地址
改:23 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
为:23 KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"   #允许所有节点可以访问 apiserver 
​
[root@master ~]# tail -5 /etc/kubernetes/scheduler   #scheduler是kubernetes 调度服务
# default config should be adequate
# Add your own!
KUBE_SCHEDULER_ARGS="0.0.0.0"  #改 scheduler 监听到的地址为:0.0.0.0,默认是 127.0.0.1
[root@master ~]# vim /etc/sysconfig/flanneld
改:4 FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"
为:4 FLANNEL_ETCD_ENDPOINTS="http://192.168.88.133:2379"
改:8 FLANNEL_ETCD_PREFIX="/atomic.io/network"
为:8 FLANNEL_ETCD_PREFIX="/k8s/network"
#其中/k8s/network 与上面 etcd 中的 network 对应
改:11 #FLANNEL_OPTIONS=""
为:11 FLANNEL_OPTIONS="--iface=ens33" #指定通信的物理网卡

设置 etcd 网络 (存储着 k8s 容器云平台中所有节点、pods、网络等信息。)

[root@etcd ~]# etcdctl mkdir /k8s/network  ###创建一个目录/k8s/network 用于存储flannel 网络信息
[root@etcd ~]# etcdctl set /k8s/network/config '{"Network": "88.255.0.0/16"}'  
{"Network": "88.255.0.0/16"}  #赋一个字符串的值 '{"Network": "88.255.0.0/16"}'
[root@etcd ~]# etcdctl get /k8s/network/config
{"Network": "88.255.0.0/16"}
[root@etcd ~]# vim /etc/sysconfig/flanneld  #flanneld,负责在提前配置好的地址空间中分配子网租约,Flannel 使用 etcd 来存储网络配置
# Flanneld configuration options  
# etcd url location.  Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.88.133:2379" 
# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/k8s/network"
# Any additional options that you want to pass
FLANNEL_OPTIONS="--iface=ens33" ##指定通信的物理网卡
[root@etcd ~]# vim /etc/sysconfig/flanneld
[root@etcd ~]# vim /etc/sysconfig/flanneld
[root@etcd ~]# systemctl restart flanneld
[root@etcd ~]# systemctl enable flanneld
Created symlink from /etc/systemd/system/multi-user.target.wants/flanneld.service to /usr/lib/systemd/system/flanneld.service.
Created symlink from /etc/systemd/system/docker.service.wants/flanneld.service to /usr/lib/systemd/system/flanneld.service.
[root@etcd ~]# systemctl status flanneld
● flanneld.service - Flanneld overlay address etcd agent
   Loaded: loaded (/usr/lib/systemd/system/flanneld.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-12-02 02:06:21 EST; 7s ago
 Main PID: 48089 (flanneld)
   CGroup: /system.slice/flanneld.service
           └─48089 /usr/bin/flanneld -etcd-endpoints=http://192.168.88.133:2379 -etcd-prefix=/k8s/network --iface=ens33
[root@etcd ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.133  netmask 255.255.255.0  broadcast 192.168.88.255
        inet6 fe80::250:56ff:fe2b:5af0  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:2b:5a:f0  txqueuelen 1000  (Ethernet)
        RX packets 80067  bytes 107620683 (102.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22599  bytes 1698563 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1472
        inet 88.255.62.0  netmask 255.255.0.0  destination 88.255.62.0
        inet6 fe80::447c:58ae:e12d:91b8  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3  bytes 144 (144.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 flannel 启动过程解析:
(1)、从 etcd 中获取出/k8s/network/config 的值
(2)、划分 subnet 子网,并在 etcd 中进行注册
(3)、将子网信息记录到/run/flannel/subnet.env 中
[root@etcd ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=88.255.0.0/16
FLANNEL_SUBNET=88.255.62.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false    

配置 minion1 节点节点服务器

[root@minion1 ~]# vim /etc/sysconfig/flanneld
# Flanneld configuration options  
# etcd url location.  Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.88.133:2379" 
# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/k8s/network"
# Any additional options that you want to pass
FLANNEL_OPTIONS="--iface=ens33"
[root@minion1 ~]# vim /etc/kubernetes/config
​
[root@minion1 ~]# tail -5 /etc/kubernetes/config
​
# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=false"
# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://192.168.88.132:8080"  ###修改master的路径
​
[root@minion1 ~]# vim /etc/kubernetes/kubelet #Kubelet 运行在 minion 节点上,Kubelet 组件管理 Pod、Pod 中容器及容器的镜像和卷等信息
# kubernetes kubelet (minion) config
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=0.0.0.0"    #监听所有端口
# The port for the info server to serve on
# KUBELET_PORT="--port=10250"
# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=minion1"  ##更改成自己的主机名更加容易识别
# location of the api-server
KUBELET_API_SERVER="--api-servers=http://192.168.88.132:8080" ###更改api的路径
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
# Add your own!
KUBELET_ARGS=""
[root@minion1 ~]# systemctl restart flanneld kube-proxy kubelet docker
[root@minion1 ~]# systemctl enable flanneld kube-proxy kubelet docker
[root@minion1 ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 88.255.5.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:58:b6:2a:8f  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@minion1 ~]# netstat -antup | grep proxy
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      46200/kube-proxy        

配置 minion2 节点节点服务器

[root@minion1 ~]# scp /etc/kubernetes/config 192.168.88.135:/etc/kubernetes/
[root@minion1 ~]# scp /etc/kubernetes/proxy 192.168.88.135:/etc/kubernetes/ #Kube-proxy运行在 minion 节点上。 代理做端口转发,相当于 LVS-NAT 模式中的负载调度器 
[root@minion2 ~]# systemctl start kube-proxy
[root@minion2 ~]# systemctl enable kube-proxy
[root@minion1 ~]#  scp /etc/kubernetes/kubelet 192.168.88.135:/etc/kubernetes/ #Kubelet 运行在 minion 节点上,Kubelet 组件管理 Pod、Pod 中容器及容器的镜像和卷等信息
[root@minion2 ~]# vim /etc/kubernetes/kubelet
改:KUBELET_HOSTNAME="--hostname-override=minion2"
[root@minion2 ~]# systemctl restart kubelet
[root@minion2 ~]# systemctl enable kubelet
[root@minion2 ~]# systemctl restart flanneld kube-proxy kubelet docker
[root@minion2 ~]# systemctl enable flanneld kube-proxy kubelet docker
[root@minion2 ~]#  ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 88.255.100.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:80:93:b7:38  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@minion2 ~]# netstat -antup | grep proxy
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      51485/kube-proxy    
tcp        0      0 192.168.88.135:57952    192.168.88.132:8080     ESTABLISHED 51485/kube-proxy    
tcp        0      0 192.168.88.135:57954    192.168.88.132:8080     ESTABLISHED 51485/kube-proxy   

登录 master 查看整个集群的运行状态: [root@master ~]# kubectl get nodes NAME STATUS AGE minion1 Ready 6m minion2 Ready 3s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值