搭建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.132 | master | centos7.6 4G4核 |
192.168.88.133 | etcd | centos7.6 4G4核 |
192.168.88.134 | minion1 | centos7.6 2G4核 |
192.168.88.135 | minion2 | centos7.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配置 minion1 节点节点服务器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 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 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 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
[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配置 minion2 节点节点服务器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
[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=4099mtu 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
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
新闻名称:搭建Kubernetes管理系统-创新互联
网页URL:http://scjbc.cn/article/jdjog.html