中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群

發布時間:2020-07-24 02:10:48 來源:網絡 閱讀:1088 作者:OMCloud 欄目:云計算

一、什么是 Kubernetes

Kubernetes 是 Google (谷歌內部:Borg)開源的容器集群管理系統,其提供應用部署、維護、 擴展機制等功能,利用 Kubernetes 能方便地管理跨機器運行容器化的應用,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。它既是一款容器編排工具,也是全新的基于容器技術的分布式架構領先方案。

二、 Kubernetes架構和組件

K8S集群中有管理節點工作節點兩種類型。

1)架構

k8s集群的管理節點,負責管理集群,提供集群的資源數據訪問入口。擁有Etcd存儲服務(可選),運行Api Server進程,Controller Manager服務進程及Scheduler服務進程,關聯工作節點Node。Kubernetes API server提供HTTP Rest接口的關鍵服務進程,是Kubernetes里所有資源的增、刪、改、查等操作的唯一入口。也是集群控制的入口進程;Kubernetes Controller Manager是Kubernetes所有資源對象的自動化控制中心;Kubernetes Schedule是負責資源調度(Pod調度)的進程
工作節點是Kubernetes集群架構中真正運行Pod的節點,為容器和Pod提供計算資源,Pod及容器全部運行在工作節點上,工作節點通過kubelet服務與管理節點通信以管理容器的生命周期,并與集群其他節點進行通信。

2)核心組件

管理節點:
1.Kubernetes API Server
   作為Kubernetes系統的入口,其封裝了核心對象的增刪改查操作,以RESTful API接口方式提供給外部客戶和內部組件調用。維護的REST對象持久化到Etcd中存儲。
  2.Kubernetes Scheduler
  為新建立的Pod進行節點(node)選擇(即分配機器),負責集群的資源調度。組件抽離,可以方便替換成其他調度器。
 3.Kubernetes Controller
  負責執行各種控制器,目前已經提供了很多控制器來保證Kubernetes的正常運行。
工作節點:
1.Kubelet
  負責管控容器,Kubelet會從Kubernetes API Server接收Pod的創建請求,啟動和停止容器,監控容器運行狀態并匯報給Kubernetes API Server。
  2.Kubernetes Proxy
  負責為Pod創建代理服務,Kubernetes Proxy會從Kubernetes API Server獲取所有的Service信息,并根據Service的信息創建代理服務,實現Service到Pod的請求路由和轉發,從而實現Kubernetes層級的虛擬轉發網絡。
centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群

三、基礎環境準備

環境配置信息如下(本次采用虛擬機作為測試環境):

IP地址 主機名 系統 內核版本 CPU 內存
192.168.100.6 master01.cluster.k8 CentOS 7.6 5.2.6 4c 4G
192.168.100.7 node01.cluster.k8 CentOS 7.6 5.2.6 4c 4G
192.168.100.8 node02.cluster.k8 CentOS 7.6 5.2.6 4c 4G
1.設置主機名hostname,如在master節點上執行:
[root@master01 ~]# hostnamectl set-hostname master01.cluster.k8

可以按照此方式設置其它主機的主機名

2.添加本機的域名解析,修改master和node節點上的/etc/hosts文件,執行如下命令:
[root@master01 ~]# cat <<EOF >>/etc/hosts
192.168.100.6 master01.cluster.k8
192.168.100.7 node01.cluster.k8
192.168.100.8 node02.cluster.k8
EOF
3.關閉防火墻、selinux和swap
1)關閉防火墻
[root@master01 ~]#  systemctl stop firewalld
[root@master01 ~]#  systemctl disable firewalld
2)禁用selinux
[root@master01 ~]#  setenforce 0  #臨時生效
[root@master01 ~]#  sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config  #永久生效(需要重啟服務器
3)關閉交換分區
[root@master01 ~]# swapoff -a
[root@master01 ~]# sed -i 's/.*swap.*/#&/' /etc/fstab
4.配置內核參數,將橋接的IPv4流量傳遞到iptables的鏈中
[root@master01 ~]# cat > /etc/sysctl.d/k8s.conf  <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master01 ~]# sysctl --system

注意:如果配置時出現No such file or directory,簡單來說就是執行一下

[root@master01 ~]#  modprobe br_netfilter
5.安裝ntpdate,保證集群時間同步
[root@master01 ~]# yum install -y ntpdate
[root@master01 ~]# ntpdate -u ntp.aliyun.com
#可以添加定時任務,進行時鐘定時同步
[root@master01 ~]# crontab -e
*/10 * * * * /usr/sbin/ntpdate ntp.aliyun.com;/sbin/hwclock -w;
6.其他軟件安裝
[root@master01 ~]#yum install wget
7.配置yum源
1)配置阿里云的Kubernetes源
[root@master01 ~]#cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2)配置docker源
[root@master01 ~]#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

四、安裝部署

1、安裝docker
[root@master01 ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
# 列出Docker版本
[root@master01 ~]#yum list docker-ce --showduplicates | sort -r
# 安裝指定版本
[root@master01 ~]#yum install docker-ce-18.06.3
[root@master01 ~]#systemctl enable docker && systemctl start docker
注意,如果測試環境沒有公網ip的情況下,為了保證docker能夠正常去拉取鏡像,這時就需要為docker配置代理,配置方式如下:
1)直接修改/etc/sysconfig/docker,添加如下內容 (不建議這種方式,這種方式在docker升級或者一些更新操作的時候會導致失效)

HTTP_PROXY="http://[proxy-addr]:[proxy-port]/"
HTTPS_PROXY="https://[proxy-addr]:[proxy-port]/"
export HTTP_PROXY HTTPS_PROXY

2)為docker服務創建一個systemd的目錄,并創建docker proxy的代理配置文件,該方式配置后會一直生效
[root@master01 ~]# mkdir -p /etc/systemd/system/docker.service.d

創建/etc/systemd/system/docker.service.d/http-proxy.conf文件,并添加HTTP_PROXY環境變量

[root@master01 ~]#vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

重新加載配置:

 [root@master01 ~]#systemctl daemon-reload

重新啟動docker

 [root@master01 ~]#systemctl restart docker
2、在三個節點分別安裝kubeadm、kubelet、kubectl
[root@master01 ~]# yum install -y kubeadm、kubelet、kubectl
[root@master01 ~]# systemctl enable kubelet

Kubelet負責與其他節點集群通信,并進行本節點Pod和容器生命周期的管理。Kubeadm是Kubernetes的自動化部署工具,降低了部署難度,提高效率。Kubectl是Kubernetes集群管理工具

3、部署master管理節點
[root@master01 ~]# kubeadm init --kubernetes-version=1.15.2 \
--apiserver-advertise-address=192.168.100.6 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=100.64.0.0/10 \
--pod-network-cidr=10.244.0.0/16

注意:kubeadm在部署的過程中,默認是從k8s.grc.io下載鏡像,國內訪問會有問題,所以建議通過--image-repository自己來指定國內的鏡像倉庫,
這里使用阿里云的鏡像倉庫
如果集群初始化成功,則會返回如下信息

kubeadm join 192.168.100.6:6443 --token v***ht.38oa8f6snaaiycga     --discovery-token-ca-cert-hash sha256:4930dc9796565dd23f221ad7336afee37a7f4790c7487ded6ca26efffae3058a

這些信息是用于將其它node節點加入到Kubernetes集群,在其它node節點上直接執行上邊這條命令信息,即可將節點加入到集群。

4、配置集群的管理工具kubectl
[root@master01 ~]#mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config

注意:需要將master節點的/root/.kube/config同時也拷貝到其它node節點,否則在通過kubectl查看集群資源信息時會出現The connection to the server localhost:8080 was refused - did you specify the right host or port?錯誤。
如果將master節點的/root/.kube/config拷貝到其它node節點后,在其它node節點通過kubectl獲取相關集群資源對象信息時出現Unable to connect to the server: Forbidden,請檢查一下節點是否配置了https代理,如果需要取消代理。

5、部署node節點

直接節點上執行第三步中集群初始化完成后輸出的信息,就可以將節點加入到Kubernetes集群中:

[root@node01 ~]#kubeadm join 192.168.100.6:6443 --token v***ht.38oa8f6snaaiycga     --discovery-token-ca-cert-hash sha256:4930dc9796565dd23f221ad7336afee37a7f4790c7487ded6ca26efffae3058a

此時查看集群的節點信息:

[root@master01 ~]#kubectl get nodes
NAME                STATUS   ROLES    AGE     VERSION
node01.cluster.k8   NotReady    master   5m   v1.15.2
node02.cluster.k8   NotReady    <none>   1m   v1.15.2
node03.cluster.k8   NotReady    <none>   1m   v1.15.2

可以看到集群節點的狀態現在還處于NotReady狀態,應為現在還沒有安裝網絡插件,主流的網絡插件有:flannel、calico、canel等

6、部署flannel網絡
[root@master01 ~]#kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

部署過程中需要去拉取flannel鏡像,可能會稍微慢一點,等部署完成后,在去查看集群狀態,可以發現集群節點都已經Ready了。

[root@master01 ~]#kubectl get nodes
NAME                STATUS   ROLES    AGE     VERSION
node01.cluster.k8   Ready    master   15m   v1.15.2
node02.cluster.k8   Ready    <none>   10m   v1.15.2
node03.cluster.k8   Ready    <none>   10m   v1.15.2

這時候我們就可以通過kubectl工具去創建Pod了。

7、為了管理方便,可以為集群部署一個Dashboard
[root@master01 ~]#kubectl apply -f  https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

注意點:

第一:k8s dashboard 的docker鏡像默認是從k8s.grc.io下載鏡像,國內可能無法訪問,所以可以先下載kubernetes-dashboard.yaml到本地,然后修改 docker鏡像的倉庫地址為阿里云倉庫地址。
[root@master01 ~]#wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
#替換鏡像倉庫
[root@master01 ~]#sed -i 's/k8s.gcr.io/registry.aliyuncs.com/google_containers/g' kubernetes-dashboard.yaml
第二:在kubernetes-dashboard.yaml中,關于 kubernetes-dashboard的服務(Service)的定義如下:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

默認沒有指定spec.type,所以默認類型為ClusterIP,所以導致結果為kubernetes-dashboard服務沒有映射本地端口,為能夠通過節點IP+端口號的方式訪問dashboard,則需要對kubernetes-dashboard.yaml做如下修改:

[root@master01 ~]#sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30443\n\ \ type: NodePort' kubernetes-dashboard.yaml
#修改后,kubernetes-dashboard的服務(Service)的定義如下:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard

centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群
重新部署Dashboard

[root@master01 ~]#kubectl delete -f kubernetes-dashboard.yaml
[root@master01 ~]#kubectl apply -f kubernetes-dashboard.yaml

建議使用火狐瀏覽器Firefox訪問Dashboard的地址:https://192.168.100.6:30443

注意:使用其它瀏覽器可能無法訪問, 原因是Kubernetes Dashboard自身證書的問題,所以可以通過自己生成自簽簽證書來解決這個問題。可以參看:https://blog.51cto.com/10616534/2430512
centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群

8、獲取登錄Dashboard的token(令牌):
#創建一個用于Dashboard訪問集群的服務賬號dashboard-admin
[root@master01 ~]#kubectl create serviceaccount  dashboard-admin -n kube-system
#將服務賬號dashboard-admin和默認的集群角色cluster-admin綁定
[root@master01 ~]#kubectl create clusterrolebinding  dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
#獲取token
[root@master01 ~]#kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群

9、使用token登錄Dashboard

centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群
認證通過后可以看到如下的Dashboard界面:
centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群

10、嘗試部署一個pod,并通過Dashboard進行查看
[root@master01 ~]#kubectl create deployment my-nginx --image=nginx

centos7基于kubeadm安裝部署Kubernetes (1.15.2)集群

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍城县| 吴江市| 沁水县| 商丘市| 楚雄市| 武宣县| 通城县| 龙泉市| 色达县| 衡阳市| 南陵县| 连山| 沂南县| 江阴市| 武山县| 武定县| 沧州市| 岳西县| 淅川县| 新郑市| 聂拉木县| 浮山县| 汾西县| 来凤县| 桃江县| 怀化市| 云和县| 玉山县| 仙居县| 顺平县| 鄂托克旗| 朝阳市| 仁布县| 贵州省| 政和县| 张北县| 中方县| 隆尧县| 醴陵市| 祥云县| 昔阳县|