日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)

發布時間:2024/9/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CentOS 7.5 使用 yum 安装 Kubernetes 集群(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、安裝方式介紹

1、yum 安裝

目前CentOS官方已經把Kubernetes源放入到自己的默認 extras 倉庫里面,使用 yum 安裝,好處是簡單,壞處也很明顯,需要官方更新 yum 源才能獲得最新版本的軟件,而所有軟件的依賴又不能自己指定,尤其是你的操作系統版本如果低的話,使用 yum 源安裝的 Kubernetes 的版本也會受到限制,通常會低于官方很多版本,我安裝的時候目前官方版本為1.12,而 yum 源中的版本為1.5.2。

2、二進制安裝

使用二進制文件安裝,好處是可以安裝任意版本的 Kubernetes,壞處是配置比較復雜,很多軟件包因為一些原因,我們在大陸是訪問不到的。
請查看博文:http://blog.51cto.com/wzlinux/2322345

3、Kubeadm 安裝

kubeadm 是 Kubernetes 官方提供的用于快速安裝 Kubernetes 集群的工具,伴隨Kubernetes每個版本的發布都會同步更新,kubeadm會對集群配置方面的一些實踐做調整,通過實驗 kubeadm 可以學習到 Kubernetes 官方在集群配置上一些新的最佳實踐。

1.4 版本對于Linux主要發行版本Ubuntu Xenial和Red Hat centos7的用戶,可以使用熟悉的 apt-get 和 yum 來直接安裝 Kubernetes。再比如,1.4版本引入了 kubeadm 命令,將集群啟動簡化為兩條命令,不需要再使用復雜的kube-up腳本。

Kubernetes 的官方文檔更新的速度太快了,我們注意到在 Kubernetes 1.9 的文檔Using kubeadm to Create a Cluster中已經給出了目前1.9的 kubeadm 的主要特性已經處于beta狀態了,在2018年將進入GA狀態,說明kubeadm離可以在生產環境中使用的距離越來越近了,這也是我們以后注意使用的安裝方式,但是為了了解其中的安裝過程,我們先從其他兩種安裝方式入手。
請查看博文:http://blog.51cto.com/wzlinux/2322616

這里我們選用第一種方式安裝。

二、主要組件說明

1、Master組件

Master組件提供集群的管理控制中心。

Master組件可以在集群中任何節點上運行。但是為了簡單起見,通常在一臺VM/機器上啟動所有Master組件,并且不會在此VM/機器上運行用戶容器

  • kube-apiserver
    kube-apiserver用于暴露Kubernetes API。任何的資源請求/調用操作都是通過kube-apiserver提供的接口進行。

  • etcd
    etcd是Kubernetes提供默認的存儲系統,保存所有集群數據,使用時需要為etcd數據提供備份計劃。

  • kube-controller-manager
    kube-controller-manager運行管理控制器,它們是集群中處理常規任務的后臺線程。邏輯上,每個控制器是一個單獨的進程,但為了降低復雜性,它們都被編譯成單個二進制文件,并在單個進程中運行。

  • kube-scheduler
    kube-scheduler 監視新創建沒有分配到Node的Pod,為Pod選擇一個Node。

2、Node 組件

  • kubelet
    kubelet是主要的節點代理,它會監視已分配給節點的pod,具體功能:

  • 安裝Pod所需的volume。
  • 下載Pod的Secrets。
  • Pod中運行的 docker(或experimentally,rkt)容器。
  • 定期執行容器健康檢查。
  • Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.
  • Reports the status of the node back to the rest of the system.
  • kube-proxy
    kube-proxy通過在主機上維護網絡規則并執行連接轉發來實現Kubernetes服務抽象。

  • docker
    docker用于運行容器。

  • flannel
    Flannel 是 CoreOS 團隊針對 Kubernetes 設計的一個覆蓋網絡(Overlay Network)工具,需要另外下載部署。我們知道當我們啟動 Docker 后會有一個用于和容器進行交互的 IP 地址,如果不去管理的話可能這個 IP 地址在各個機器上是一樣的,并且僅限于在本機上進行通信,無法訪問到其他機器上的 Docker 容器。Flannel 的目的就是為集群中的所有節點重新規劃 IP 地址的使用規則,從而使得不同節點上的容器能夠獲得同屬一個內網且不重復的 IP 地址,并讓屬于不同節點上的容器能夠直接通過內網 IP 通信。

三、環境準備

1、節點準備

IP角色主要組件
172.18.8.200master:kubernetes-masterkube-apiserver,kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,etcd
172.18.8.201node01:kubernetes-nodedocker,kubelet,kube-proxy,flannel
172.18.8.202node02:kubernetes-nodedocker,kubelet,kube-proxy,flannel

節點及網絡規劃圖如下:

2、現在倉庫中的版本

軟件版本
kubernetes-master1.5.2-0.7.git269f928.el7
kubernetes-node1.5.2-0.7.git269f928.el7
CentOS 7.5CentOS Linux release 7.5.1804
Dockerdocker-1.13.1-75
etcd3.2.22-1.el7
flannel0.7.1-4.el7

3、環境準備

修改文件/etc/hostname。
編輯文件/etc/hosts,增加如下內容,

172.18.8.200 master.wzlinux.com master 172.18.8.201 node01.wzlinux.com node01 172.18.8.202 node02.wzlinux.com node02

關閉防火墻。

systemctl stop firewalld.service systemctl disable firewalld.service

關閉SELinux。

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config setenforce 0

關閉swap。

swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab

四、安裝 master 節點

1、軟件安裝

安裝需要的軟件。

yum install kubernetes-master etcd -y

修改共用的配置文件/etc/kubernetes/config,修改master節點,因為我們都在一臺機器上面,不修改也可以。

### # kubernetes system config # # The following values are used to configure various aspects of all # kubernetes services, including # # kube-apiserver.service # kube-controller-manager.service # kube-scheduler.service # kubelet.service # kube-proxy.service # logging to stderr means we get it in the systemd journal KUBE_LOGTOSTDERR="--logtostderr=true"# journal message level, 0 is debug KUBE_LOG_LEVEL="--v=0"# 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://172.18.8.200:8080"

2、配置 etcd

因為我們很多服務使用到etcd,所以我們首先配置etcd服務。
在master節點上編輯文件/etc/etcd/etcd.conf,修改為如下內容,主要是修改監聽IP:

[root@master ~]# 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://0.0.0.0:2379" #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" ETCD_NAME="default" #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://0.0.0.0:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_DISCOVERY_SRV="" #ETCD_INITIAL_CLUSTER="default=http://localhost:2380" #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #ETCD_INITIAL_CLUSTER_STATE="new" #ETCD_STRICT_RECONFIG_CHECK="true" #ETCD_ENABLE_V2="true" # #[Proxy] #ETCD_PROXY="off" #ETCD_PROXY_FAILURE_WAIT="5000" #ETCD_PROXY_REFRESH_INTERVAL="30000" #ETCD_PROXY_DIAL_TIMEOUT="1000" #ETCD_PROXY_WRITE_TIMEOUT="5000" #ETCD_PROXY_READ_TIMEOUT="0" # #[Security] #ETCD_CERT_FILE="" #ETCD_KEY_FILE="" #ETCD_CLIENT_CERT_AUTH="false" #ETCD_TRUSTED_CA_FILE="" #ETCD_AUTO_TLS="false" #ETCD_PEER_CERT_FILE="" #ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH="false" #ETCD_PEER_TRUSTED_CA_FILE="" #ETCD_PEER_AUTO_TLS="false" # #[Logging] #ETCD_DEBUG="false" #ETCD_LOG_PACKAGE_LEVELS="" #ETCD_LOG_OUTPUT="default" # #[Unsafe] #ETCD_FORCE_NEW_CLUSTER="false" # #[Version] #ETCD_VERSION="false" #ETCD_AUTO_COMPACTION_RETENTION="0" # #[Profiling] #ETCD_ENABLE_PPROF="false" #ETCD_METRICS="basic" # #[Auth] #ETCD_AUTH_TOKEN="simple"

啟動服務。

systemctl start etcd systemctl enable etcd

查看啟動狀態。

[root@master ~]# netstat -tlnp|grep etcd tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 1506/etcd tcp6 0 0 :::2379 :::* LISTEN 1506/etcd

若要部署多節點集群也比較簡單,參見 https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/clustering.md
[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS:該成員節點在整個集群中的通信地址列表,這個地址用來傳輸集群數據的地址。因此這個地址必須是可以連接集群中所有的成員的。
ETCD_INITIAL_CLUSTER:配置集群內部所有成員地址。

3、配置 apiserver 服務

編輯文件/etc/kubernetes/apiserver,修改為如下,注意KUBE_ADMISSION_CONTROL參數:

[root@master ~]# cat /etc/kubernetes/apiserver ### # kubernetes system config # # The following values are used to configure the kube-apiserver ## The address on the local server to listen to. #KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1" KUBE_API_ADDRESS="--address=0.0.0.0"# The port on the local server to listen on. KUBE_API_PORT="--port=8080"# Port minions listen on KUBELET_PORT="--kubelet-port=10250"# Comma separated list of nodes in the etcd cluster KUBE_ETCD_SERVERS="--etcd-servers=http://172.18.8.200:2379"# Address range to use for services KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"# default admission control policies #KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"# Add your own! KUBE_API_ARGS=""

配置/etc/kubernetes/controller-manager和/etc/kubernetes/scheduler暫時不做修改,啟動服務。

systemctl start kube-apiserver systemctl start kube-controller-manager systemctl start kube-scheduler systemctl enable kube-apiserver systemctl enable kube-controller-manager systemctl enable kube-scheduler

查看各服務的啟動狀態。

[root@master ~]# netstat -tlnp|grep kube-apiserver tcp6 0 0 :::6443 :::* LISTEN 1622/kube-apiserver tcp6 0 0 :::8080 :::* LISTEN 1622/kube-apiserver [root@master ~]# netstat -tlnp|grep kube-scheduler tcp6 0 0 :::10251 :::* LISTEN 1646/kube-scheduler

五、配置node節點

1、安裝需要的軟件

yum install kubernetes-node flannel docker -y

給docker配置國內加速器。

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors": ["https://hdi5v8p1.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload

所有node節點編輯配置文件/etc/kubernetes/config,修改為如下內容:

### # kubernetes system config # # The following values are used to configure various aspects of all # kubernetes services, including # # kube-apiserver.service # kube-controller-manager.service # kube-scheduler.service # kubelet.service # kube-proxy.service # logging to stderr means we get it in the systemd journal KUBE_LOGTOSTDERR="--logtostderr=true"# journal message level, 0 is debug KUBE_LOG_LEVEL="--v=0"# 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://172.18.8.200:8080"

2、配置 kubelet 服務

編輯文件/etc/kubernetes/kubelet,修改內容如下:

### # 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=172.18.8.201"# location of the api-server KUBELET_API_SERVER="--api-servers=http://172.18.8.200:8080"# pod infrastructure container #KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"# Add your own! KUBELET_ARGS=""

啟動服務。

systemctl start kubelet systemctl start kube-proxy systemctl enable kubelet systemctl enable kube-proxy

3、配置 flannel 網絡

編輯所有node節點/etc/sysconfig/flanneld,修改內容如下:

[root@node01 ~]# cat /etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://172.18.8.200:2379"# etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/atomic.io/network"# Any additional options that you want to pass #FLANNEL_OPTIONS=""

在master節點上為 falnnel 創建分配的網絡。

[root@master ~]# etcdctl mk /atomic.io/network/config '{"Network": "10.244.0.0/16"}'

在各node節點上啟動 flannel。

systemctl start flanneld systemctl enable flanneld

4、啟動 docker 服務

因為要讓pod使用flannel創建的網絡,所以docker的啟動要在flannel后面。

systemctl restart docker systemctl enable docker

六、檢查驗收

在master查看各node節點情況。

[root@master ~]# kubectl get nodes NAME STATUS AGE node01.wzlinux.com Ready 12m node02.wzlinux.com Ready 10m

創建pod。

kubectl run nginx --image=nginx --replicas=3

發現容器一直在創建。

[root@master ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-701339712-099j9 0/1 ContainerCreating 0 3m <none> node01.wzlinux.com nginx-701339712-vw0zh 0/1 ContainerCreating 0 3m <none> node02.wzlinux.com nginx-701339712-wqjq1 0/1 ContainerCreating 0 3m <none> node02.wzlinux.com

這種情況,我們可以使用kubectl describe pod POD_NAME查看Pod因為什么原因一直卡主。

因為網絡的原因,這個地方我們訪問不到,不過我們可以間接的獲取這個鏡像,那我們通過阿里云上面的鏡像來替代,在所以node節點執行下面的命令。

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.0 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.0 gcr.io/google_containers/pause-amd64:3.0 docker image rm registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.0

稍等片刻,我們在查看pod狀態,發現已經OK,如果還有問題,可以繼續進入容器查看日志。

[root@master ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-701339712-099j9 1/1 Running 0 11m 10.244.32.2 node01.wzlinux.com nginx-701339712-vw0zh 1/1 Running 0 11m 10.244.53.3 node02.wzlinux.com nginx-701339712-wqjq1 1/1 Running 0 11m 10.244.53.2 node02.wzlinux.com

但是還有問題,這是因為iptables的FORWARD是默認禁止的,禁用了iptables filter表中FOWARD鏈,這樣會引起Kubernetes集群中跨Node的Pod無法通信。

我們這里手動在所有node節點上面放行。

iptables -P FORWARD ACCEPT

附錄:版本更加新的yum倉庫

目前自帶的 yum 源的軟件版本都比較低,也可以更改倉庫,使用稍微較高的一個版本,目前該倉庫的版本為1.10。
http://cbs.centos.org/repos/virt7-kubernetes-110-release/x86_64/os/Packages/

cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://cbs.centos.org/repos/virt7-kubernetes-110-release/x86_64/os/ enabled=1 gpgcheck=0 EOF

其他的配置操作照舊,如果感覺下載速度慢,可以提前把rpm包下載下來,安裝配置好查看版本。

[root@master ~]# kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"archive", BuildDate:"2018-06-05T13:37:07Z", GoVersion:"go1.9.4", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"archive", BuildDate:"2018-06-05T13:37:07Z", GoVersion:"go1.9.4", Compiler:"gc", Platform:"linux/amd64"}

注意:新的版本部分配置文件有些不一樣,配置的時候請注意。

到此,使用yum倉庫安裝的版本已經完成。

總結

以上是生活随笔為你收集整理的CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。