[kubernetes]部署一套三節點的k8s集群


本文主要參考https://blog.51cto.com/3241766/2405624,用於記錄成功部署的過程

環境情況:

 
主機名 操作系統 主機ip地址
master CentOS Linux release 7.2.1511 192.168.110.11
node2 CentOS Linux release 7.2.1511 192.168.110.22
node3 CentOS Linux release 7.2.1511 192.168.110.33

 

 

 

 

 

 

 

前言:

  本文通過kudeadm方式在centos7.2上安裝kubernetes v1.14.2集群,分為六個部分操作:

  • docker安裝
  • k8s安裝准備工作
  • master節點安裝
  • node節點安裝
  • dashboard安裝

一、Docker安裝

所有節點都需要安裝docker

1. 安裝依賴包

[root@centos7 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

2. 設置docker源

[root@centos7 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3. 安裝docker-ce

docker的安裝版本選擇為18.09.6,這個版本安裝是成功的

[root@centos7 ~]# yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io -y 

4. 啟動docker

[root@centos7 ~]# systemctl start docker
[root@centos7 ~]# systemctl enable docker

5. 命令補全

安裝命令補全包,用於命令行操作時雙擊tab,自動提示

[root@centos7 ~]# yum -y install bash-completion && source /etc/profile.d/bash_completion.sh

6. 鏡像加速

docker默認的鏡像源下載速度較慢,配置國內的aliyun鏡像網站,加快鏡像下載的速度

[root@centos7 ~]# mkdir -p /etc/docker
[root@centos7 ~]# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"]
}
EOF

配置完成后,需要重新加載文件,並重啟docker服務

[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl restart docker

7. 驗證

[root@centos7 ~]# docker --version
Docker version 18.09.6, build 481bc77156

二、k8s安裝准備工作

安裝的centos是已經禁用了防火牆(firewalld)和selinux,配置了阿里雲的yum源;master和node節點都需要執行本部分操作內容。

1. 配置主機名

更改主機名,此處更改的是master節點,其他node類似修改

[root@centos7 ~]# hostnamectl set-hostname master

 修改/etc/hosts文件

[root@master ~]# cat >> /etc/hosts << EOF
192.168.110.11 master
192.168.110.22 node2
192.168.110.33 node3
EOF

2. 驗證mac地址uuid

要求mac地址和uuid號不同,在使用克隆虛擬機測試部署時,需要注意對比; 保證各節點mac和uuid唯一

[root@master ~]# cat /sys/class/net/ens33/address
[root@master ~]# cat /sys/class/dmi/id/product_uuid

3. 禁用swap

[root@master ~]# swapoff -a && sed -i.bak '/swap/s/^/#/' /etc/fstab

4. 內核參數修改

[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

5. 修改cgroup driver

修改daemon.json,新增‘"exec-opts": ["native.cgroupdriver=systemd"’

[root@master ~]# more /etc/docker/daemon.json
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
} 

加載文件,重啟docker生效

[root@master ~]# systemctl daemon-reload && systemctl restart docker

 修改cgroupdriver是為了消除告警:
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/

6. 設置kubernetes源

新增k8s.repo文件

[root@master ~]# cat <<EOF > /etc/yum.repos.d/k8s.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 

節點重新生成緩存

[root@master ~]# yum clean all && yum -y makecache

三、Master節點安裝

1. 版本查看

本次安裝的kubernetes版本為1.14.2,需要先檢查源中是否包含這個版本

[root@master ~]# yum list kubelet --showduplicates | grep 1.14.2
kubelet.x86_64                       1.14.2-0                        kubernetes

2. 安裝kubelet、kubeadm和kubectl

安裝三個軟件包,分別為kubelet,kubeadm,kubectl

[root@master ~]# yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2
  • kubelet 運行在集群所有節點上,用於啟動Pod和容器等對象的工具
  • kubeadm 用於初始化集群,啟動集群的命令工具
  • kubectl 用於和集群通信的命令行,通過kubectl可以部署和管理應用,查看各種資源,創建、刪除和更新各種組件

啟動服務,並設置開機自啟

[root@master ~]# systemctl enable kubelet && systemctl start kubelet

設置自動補全

3. 下載鏡像

Kubernetes幾乎所有的安裝組件和Docker鏡像都放在goolge自己的網站上,直接訪問可能會有網絡問題,這里的解決辦法是從阿里雲鏡像倉庫下載鏡像,拉取到本地以后改回默認的鏡像tag,腳本如下; 在節點上執行該腳本

[root@master ~]# more image.sh 
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.14.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

4. 初始化master

[root@master ~]# kubeadm init --apiserver-advertise-address 192.168.110.11 --pod-network-cidr=10.244.0.0/16

apiserver-advertise-address指定master的interface,pod-network-cidr指定Pod網絡的范圍,這里使用flannel網絡方案。

將命令輸出結果的最后一行保存下來,用於其他節點加入該集群,內容類似如下:

[root@master config]# more join_cluster 
kubeadm join 192.168.110.11:6443 --token z562f4.rs3yvzplnh3o80zn \
    --discovery-token-ca-cert-hash sha256:1661c4532d4054a3f312a8f1e2232ef0b19033482aa52ca4e97f574b139e1cf7

 配置環境變量

[root@master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@master ~]# source .bash_profile

本文所有操作都在root用戶下執行,若為非root用戶,則執行如下操作:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config 

5. 安裝pod網絡

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

6. master節點配置 

默認情況下集群不會在master上調度pod,如果偏想在master上調度Pod,可以執行如下操作: 

查看污點:

[root@master ~]# kubectl describe node master|grep -i taints
Taints:             node-role.kubernetes.io/master:NoSchedule 

刪除默認污點:

[root@master ~]# kubectl taint nodes master node-role.kubernetes.io/master-
node/master untainted

四、Node節點安裝

1. 安裝kubelet、kubeadm和kubectl 

同master節點

2. 下載鏡像

同master節點

3. 加入集群

在各個node上執行之前保存的join_cluster的命令

[root@master config]# kubeadm join 192.168.110.11:6443 --token z562f4.rs3yvzplnh3o80zn \
    --discovery-token-ca-cert-hash sha256:1661c4532d4054a3f312a8f1e2232ef0b19033482aa52ca4e97f574b139e1cf7

五、dashboard安裝

1. 下載使用kubernetes-dashboard.yaml

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml

2. 配置本地訪問dashboard

參照內容: https://github.com/kubernetes/dashboard

master節點執行命令,在master節點能夠訪問控制台,放在后台執行

[root@master ~]# kubectl proxy &

 配置轉發(可以做多層轉發),在本地(這里是筆記本電腦)訪問dashboard

$ ssh -L 8001:127.0.0.1:8001 -N -f root@192.168.110.11

 筆記本是ubuntu系統,直接在命令行執行以上命令,轉發master節點的8001端口

-L: 開啟端口轉發; local_socket(8001):host(192.168.110.11):hostport(8001)

-N: 遠端不執行命令

-f: 將ssh放在后台執行

然后在筆記本瀏覽器中輸入如下地址,訪問控制台

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

 

3. 新增admin-user用戶

參照內容: https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

編輯用於新增用戶的文件add_user.yml

cat <<EOF > /tmp/add_user.yml
apiVersion: v1                                  # 增加用戶admin-user
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1        # clusterrolebinding
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF 

 

加載文件配置

[root@master config]# kubectl apply -f /tmp/add_user.yaml

 

用戶創建成功,權限相關綁定也已經完成

4. 獲取admin-user用戶token用於登錄控制台

執行命令,獲取secret

[root@master config]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

 

 輸出內容大致如下

[root@master ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-zckb9
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: 11071726-a225-11ea-959c-08002744270a

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXpja2I5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxMTA3MTcyNi1hMjI1LTExZWEtOTU5Yy0wODAwMjc0NDI3MGEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.gulUhc-oKe7M3AXzBp75vyowiVNtPPpZUJXymMhvk6jyk1CtMkMA-432knTULV0iACpEgGDYrN-IY7PBXVbxMLN6K_eajHQxbmFYx9p_m24Caaya7_dEaoXysy3Cl91NhlofGrGLbQfOBKqZhrNDPAB8XxucDLyAtCAq36K2kmuH_ewm1LTmaV5T2-zNXIWaJGkEQ38cRnATq4NgiMIdkKDxGSiE_9QFWqTzYXXx5_La8v1eRMz425K5p_4Lnue0eqKGf6DUYTYtFO8yYumjLd9E5XPo5PzohKiLKMrr6FfLmIYEgDzqKeFXijpHCDJ4SfGAZrbSNBpYS9jzh4hzog

 

復制token行內容就可以用於登錄控制台了 

 


免責聲明!

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



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