十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
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 系統(tǒng)中最有用的功能,實現(xiàn)復制多個 Pod 副本,往往一個應用需要多個 Pod 來支撐,并且可以保證其復制的副本數(shù),即使副本所調度分配的宿主機出現(xiàn)異常,通過 Replication Controller 可以保證在其它宿主機啟用同等數(shù)量的 Pod,Replication Controller 可以通過 repcon 模板來創(chuàng)建多個 Pod 副本,同樣也可以直接復制已存在 Pod,需要通過 Label selector 來關聯(lián)。
5、minion : 真正運行容器 container 的物理機, kubernets 中需要很多 minion 機器,來提供運算 6、container : 容器 ,可以運行服務和程序 7、 Pod :在 Kubernetes 系統(tǒng)中,調度的最小顆粒不是單純的容器,而是抽象成一個 Pod,Pod是一個可以被創(chuàng)建、銷毀、調度、管理的最小的部署單元;pod 中可以包括一個或一組容器 8、Kube_proxy 代理做端口轉發(fā),相當于 LVS-NAT 模式中的負載調度器 Proxy 解決了同一宿主機,相同服務端口沖突的問題,還提供了對外服務的能力,Proxy 后端使用了隨機、輪循負載均衡算法。
9、etcd etcd 存儲 kubernetes 的配置信息, 可以理解為是 k8s 的數(shù)據(jù)庫,存儲著 k8s 容器云平臺中所有節(jié)點、pods、網絡等信息。Linux 系統(tǒng)中/etc 目錄作用是存儲配置文件,所以 etcd (daemon) 是一個存儲配置文件的后臺服務。
10、Services : Services 是 Kubernetes 最外圍的單元,通過虛擬一個訪問 IP 及服務端口,可以訪問我們定義好的 Pod 資源,目前的版本是通過 iptables 的 nat 轉發(fā)來實現(xiàn),轉發(fā)的目標端口為 Kube_proxy 生成的隨機端口。
11、Labels 標簽 Labels 是用于區(qū)分 Pod、Service、Replication Controller 的 key/value 鍵值對,僅使用在 Pod、Service、 Replication Controller 之間的關系識別,但對這些單元本身進行操作時得使用 name標簽。 12、 Deployment Kubernetes Deployment 用于更新 Pod 和 Replica Set(下一代的 Replication Controller)的 方法,你可以在 Deployment 對象中只描述你所期望的理想狀態(tài)(預期的運行狀態(tài)),Deployment 控制器會將現(xiàn)在的實際狀態(tài)轉換成期望的狀態(tài)。例如,將所有的 webapp:v1.0.9 升級成 webapp:v1.1.0,只需創(chuàng)建一個 Deployment,Kubernetes 會按照 Deployment 自動進行升級。通過 Deployment 可以用來創(chuàng)建新的資源。Deployment 可以幫我們實現(xiàn)無人值守的上線,大大降低我們的上線過程的復雜溝通、操作風險。
13、Kubelet 命令 : Kubelet 和 Kube-proxy 都運行在 minion 節(jié)點上。 Kube-proxy 實現(xiàn) Kubernetes 網絡相關內容。 Kubelet 命令管理 Pod、Pod 中容器及容器的鏡像和卷等信息。
各組件之間的關系1、Kubernetes的架構由一個master和多個minion組成,master通過api提供服務,接受kubectl的請求來調度管理整個集群; kubectl: 是 k8s 平臺的一個管理命令
2、Replication controller 定義了多個 pod 或者容器需要運行,如果當前集群中運行的 pod 或容器達不到配置的數(shù)量,replication controller 會調度容器在多個 minion 上運行,保證集群中的 pod 數(shù)量
3、service 則定義真實對外提供的服務,一個 service 會對應后端運行的多個 container
4、Kubernetes 是個管理平臺,minion 上的kube-proxy 擁有提供真實服務公網 IP,客戶端訪問kubernetes 中提供的服務,是直接訪問到 kube-proxy 上的
5、在 Kubernetes 中 pod 是一個基本單元,一個 pod 可以是提供相同功能的多個 container,這些容器會被部署在同一個 minion 上;minion 是運行 Kubelet 中容器的物理機;minion 接受 master的指令創(chuàng)建 pod 或者容器
搭建 Kubernetes 系統(tǒng)minion : 真正運行容器 container 的物理機, kubernets 中需要很多 minion 機器,來提供運算
ip地址 | 主機名 | 系統(tǒng) |
---|---|---|
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
###修改所有節(jié)點的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對外服務監(jiān)聽地址 #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" ETCD_NAME="etcd" ? #修改etcd 節(jié)點名稱 #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的監(jiān)聽的地址 ? [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" ? ###修改為監(jiān)聽所有端口 改: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" ? #允許所有節(jié)點可以訪問 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 監(jiān)聽到的地址為: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 容器云平臺中所有節(jié)點、pods、網絡等信息。)
[root@etcd ~]# etcdctl mkdir /k8s/network ###創(chuàng)建一個目錄/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,負責在提前配置好的地址空間中分配子網租約,F(xiàn)lannel 使用 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 節(jié)點節(jié)點服務器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 節(jié)點上,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" ? #監(jiān)聽所有端口 # 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 節(jié)點節(jié)點服務器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 節(jié)點上。 代理做端口轉發(fā),相當于 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 節(jié)點上,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 查看整個集群的運行狀態(tài): [root@master ~]# kubectl get nodes NAME STATUS AGE minion1 Ready 6m minion2 Ready 3s
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧