centos7 部署k8s集群


centos7 部署k8s集群

簡介

Kubernetes是一個開源的,用於管理雲平台中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規划,更新,維護的一種機制。

本次部署節點列表

192.168.56.11 master
192.168.56.12 node01
192.168.56.13 node02
192.168.56.14 node03
192.168.56.15 node04

前提條件

1、為了方便部署,可提前修改主機名,重新登錄后可顯示新設置的主機名。

[root@master ~]# hostnamectl set-hostname master或者node01
[root@master ~]# more /etc/hostname 

2、centos7安裝docker ce

  • yum源設置阿里雲鏡像
 [root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、關閉防火牆或者開放k8s所需的端口
[root@master ~]# firewall-cmd --state //查看當前防火牆狀態
[root@master ~]# systemctl stop firewalld //臨時關閉防火牆

4、關閉selinux,設置sellinux=disabled

[root@master ~]# vim /etc/selinux/config

5、關閉swap

5.1、臨時關閉
[root@master ~]# swapoff -a
[root@master ~]# free -m
5.2、永久關閉
[root@master ~]# vim /etc/fstab
# 注釋此行腳本
# /dev/mapper/centos-swap swap                 swap    defaults        0 0 
[root@master ~]# free -m

6、添加主機名與IP對應的關系

[root@master ~]# vim /etc/hosts
添加如下內容:
192.168.56.11 master
192.168.56.12 node01
192.168.56.13 node02
192.168.56.14 node03
192.168.56.15 node04

7、配置內核參數,將橋接的IPv4流量傳遞到iptables的鏈

7.1、永久修改
[root@master ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
7.2、臨時修改
[root@master ~]# sysctl net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables = 1
[root@master ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-ip6tables = 1

8、設置kubernetes阿里雲源

[root@master ~]# 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.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
名詞解釋
  • [] 中括號中的是repository id,唯一,用來標識不同倉庫
  • name 倉庫名稱,自定義
  • baseurl 倉庫地址
  • enabled 是否啟用該倉庫,默認為1表示啟用
  • gpgcheck 是否驗證從該倉庫獲得程序包的合法性,1為驗證
  • repo_gpgcheck 是否驗證元數據的合法性 元數據就是程序包列表,1為驗證
  • gpgkey=URL 數字簽名的公鑰文件所在位置,如果* gpgcheck值為1,此處就需要指定gpgkey文件的位置,如果gpgcheck值為0就不需要此項了

9、更新緩存

[root@master ~]# yum clean all
[root@master ~]# yum makecache

10、linux文件上傳下載工具

[root@master ~]# yum -y install lrzsz

Master 節點安裝

1、版本查看

[root@master ~]# yum list kubelet --showduplicates | sort -r

2、安裝kubelet、kubeadm和kubectl

  • 在部署kubernetes時,要求master node和worker node上的版本保持一致,且以上3個包的版本保持一致,本次采用1.18.2版本。
2.1 安裝三個包
[root@master ~]# yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2
2.2 安裝包說明
  • kubelet 運行在集群所有節點上,用於啟動Pod和容器等對象的工具
  • kubeadm 用於初始化集群,啟動集群的命令工具
  • kubectl 用於和集群通信的命令行,通過kubectl可以部署和管理應用,查看各種資源,創建、刪除和更新各種組件
2.3 啟動kubelet並設置開機啟動
[root@master ~]# systemctl enable kubelet && systemctl start kubelet

3、從阿里雲下載鏡像

3.1、新建鏡像資源文件
[root@master ~]# touch image.sh
3.2、編輯內容
[root@master ~]# vim image.sh
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.18.2
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
  docker pull $url/$imagename
  docker tag $url/$imagename k8s.gcr.io/$imagename
  docker rmi -f $url/$imagename
done
  • url為阿里雲鏡像倉庫地址,version為安裝的kubernetes版本
3.3、授權執行
[root@master ~]# chmod u+x image.sh 
[root@master ~]# more image.sh 
[root@master ~]# ./image.sh
3.4、鏡像查看
[root@master ~]# docker images
  • 鏡像列表如下:

4、初始化Master

4.1、初始化
[root@master ~]# kubeadm init --apiserver-advertise-address 192.168.56.11 --pod-network-cidr=10.244.0.0/16
  • apiserver-advertise-address指定master的interface,pod-network-cidr指定Pod網絡的范圍。
  • 建議CPU至少2核,單核CPU會提示如下:the number of available CPUs 1 is less than the required 2。
  • 記錄kubeadm join的輸出,后面需要這個命令將各個節點加入集群中。如下:
kubeadm join 192.168.56.11:6443 --token pe9tlb.kuoifhlthdi0t0iq \
    --discovery-token-ca-cert-hash sha256:eb4e4530d44b333ba8428dc26dda8ab9c87d8eec196d75480e202834065f14cd
4.2、加載環境變量
  • root 用戶,執行如下操作:
[root@master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@master ~]# source .bash_profile 
  • 非root用戶,執行如下操作:
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
4.3、使用kubectl工具,如圖:
[root@master ~]# kubectl get node

5、安裝Pod網絡插件(CNI)

  • 運行過程如圖:
5.1、安裝插件
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
5.2、查看是否部署成功
[root@master ~]# kubectl get pods -n kube-system
5.3、再次查看node,可以看到狀態為ready
[root@master ~]# kubectl get node

6、加入集群,以下操作master上執行

6.1、查看節點令牌
[root@master ~]# kubeadm token list                 
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
2pifuy.7860pe6z0zp1tykt 23h 2020-05-28T14:02:07+08:00 authentication,signing system:bootstrappers:kubeadm:default-node-token
6.2、若令牌已過期,則生成新的令牌
[root@master ~]# kubeadm token create
W0527 14:02:07.213228   25628 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
2pifuy.7860pe6z0zp1tykt

6.3、獲取ca證書sha256編碼hash值,生成新的加密串
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
eb4e4530d44b333ba8428dc26dda8ab9c87d8eec196d75480e202834065f14cd
[root@master ~]#

Node 節點安裝

安裝kubelet、kubeadm和kubectl,同master

下載鏡像 同master

Node節點加入集群

在node節點上分別執行如下操作:
[root@node01 ~]# kubeadm join 192.168.56.11:6443 --token pe9tlb.kuoifhlthdi0t0iq \
    --discovery-token-ca-cert-hash sha256:eb4e4530d44b333ba8428dc26dda8ab9c87d8eec196d75480e202834065f14cd

Dashboard安裝

k8s官網教程

下載並執行kubernetes-dashboard.yaml

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
[root@master ~]# docker images

安裝文件中定義了dashboard相關的資源,可以查閱YAML文件,資源包含有:

  • kubernetes-dashboard命名空間
  • ServiceAccount訪問用戶
  • Service服務訪問應用,默認為ClusterIP
  • Secrets,存放有kubernetes-dashboard-certs,kubernetes-dashboard-csrf,kubernetes-dashboard-key-holder證書
  • ConfigMap配置文件
  • RBAC認證授權,包含有Role,ClusterRole,RoleBinding,ClusterRoleBinding
  • Deployments應用,kubernetes-dashboard核心鏡像,還有一個和監控集成的dashboard-metrics-scraper

kubernetes-dashbaord的資源都安裝在kubernetes-dashboard命名空間下,包含有Deployments,Services,Secrets,ConfigMap等,資源校驗如下:

kubernetes-dashbaord安裝完畢后,kubernetes-dashboard默認service的類型為ClusterIP,為了從外部訪問控制面板,修改type參數為NodePort。

[root@master ~]# kubectl edit services -n kubernetes-dashboard kubernetes-dashboard
service/kubernetes-dashboard edited
[root@master ~]# kubectl get services -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.96.153.90   <none>        8000/TCP        3h6m
kubernetes-dashboard        NodePort    10.107.1.246   <none>        443:32685/TCP   3h6m

配置RBAC認證授權,關聯集群中的相關的Role,ClusterRole和ClusterRoleBinding角色參數

[root@master ~]# touch dashboard-rbac.yaml
[root@master ~]# vim dashboard-rbac.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: testcloud
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: testcloud
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: test
  namespace: kubernetes-dashboard
[root@master ~]# chmod u+x dashboard-rbac.yaml
[root@master ~]# kubectl apply -f dashboard-rbac.yaml
serviceaccount/testcloud created
clusterrolebinding.rbac.authorization.k8s.io/testcloud created
[root@master ~]# kubectl get serviceaccounts -n kubernetes-dashboard
NAME                   SECRETS   AGE
default                1         3h37m
kubernetes-dashboard   1         3h37m
testcloud            1         64s
[root@master ~]# kubectl get secret -n kubernetes-dashboard
NAME                               TYPE                                  DATA   AGE
default-token-7px65                kubernetes.io/service-account-token   3      4h4m
kubernetes-dashboard-certs         Opaque                                0      4h4m
kubernetes-dashboard-csrf          Opaque                                1      4h4m
kubernetes-dashboard-key-holder    Opaque                                2      4h4m
kubernetes-dashboard-token-flz2n   kubernetes.io/service-account-token   3      4h4m
testcloud-token-wp2ts            kubernetes.io/service-account-token   3      27m
[root@master ~]# kubectl get secrets -n kubernetes-dashboard testcloud-token-wp2ts -o yaml

復制token參數,進行base64編碼,格式如下:

[root@master ~]# echo '你的token值' | base64 -d

復制base64編碼后的token,遠程登錄管理系統https://主機IP:端口地址,頁面參數選Token,本機測試為https://192.168.56.11:32685/。

參考文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM