使用kubeadm搭建k8s集群[1.8.0]


  • 基礎環境

IP地址 主機名 節點
172.20.48.57 k8s-master1 Master1
172.20.48.53 K8s-node1 Node1
172.20.48.54 K8s-node1 Node2

一、環境准備

1. 簡要

kubeadm是官方社區推出的快速部署kubernetes集群工具 部署環境適用於學習和使用k8s相關軟件和功能

2. 安裝要求

3台純凈centos虛擬機,版本為7.x及以上
機器配置 2核4G以上 x3台
服務器網絡互通
禁止swap分區

3. 環境准備

# 1. 關閉防火牆功能
systemctl stop firewalld
systemctl disable firewalld

# 2.關閉selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

# 3. 關閉swap
swapoff -a  # 臨時
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久


# 4. 服務器規划
cat >> /etc/hosts <<EOF
172.20.48.57 k8s-master1
17.20.48.53 k8s-node1
172.20.48.54 k8s-node2
EOF

#5. 臨時主機名配置方法:
hostnamectl set-hostname k8s-master1
bash

#6. 時間同步配置
yum install chronyd -y
cn.ntp.org.cn
systemctl restart chronyd ; systemctl enable chronyd

#開啟轉發
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

#7. 時間同步
echo '*/5 * * * * /usr/sbin/ntpdate -u ntp.api.bz' >>/var/spool/cron/root
systemctl restart crond.service
crontab -l
# 以上可以全部復制粘貼直接運行,但是主機名配置需要重新修改

4. Docker 安裝[所有節點都需要安裝]

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum clean all


yum install -y bash-completion.noarch

# 安裝指定版版本
yum -y install docker-ce-18.09.9-3.el7

#也可以查看版本安裝
yum list docker-ce --showduplicates | sort -r


# 配置docker.json
mkdir -p /etc/docker/
cat >> /etc/docker.json <<EOF
{
 "log-driver": "json-file",
 "log-opts": {
   "max-size": "10m",
   "max-file": "3"
},
 "exec-opts": ["native.cgroupdriver=systemd"],
 "data-root": "/data/docker",
 "insecure-registries":["https://xg0px8kr2.mirror.aliyuncs.com"], # 修改成自己的鏡像加速器
 "default-ulimits": {
   "nofile": {
     "Name": "nofile",
     "Hard": 64000,
     "Soft": 64000
  }
},
 "storage-driver": "overlay2",
 "storage-opts": [
   "overlay2.override_kernel_check=true"
],
 "mtu": 1450
}
EOF



# 啟動docker
systemctl enable docker
systemctl start docker
systemctl status docker

5. kubernetes源配置[所有節點]

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

6. 安裝kubeadm,kubelet和kubectl[所有節點]

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet

7. 部署Kubernetes Master [ master 172.20.48.57 ]

kubeadm init \
 --apiserver-advertise-address=172.20.48.57 \
 --image-repository registry.aliyuncs.com/google_containers \
 --kubernetes-version v1.18.0 \
 --service-cidr=10.10.0.0/16 \
 --pod-network-cidr=20.20.0.0/16
 
#成功后加入環境變量[master]:  
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

初始化后獲取到的token

kubeadm join 172.20.48.57:6443 --token h8qee8.ry1geq7ujkliir0x \ --discovery-token-ca-cert-hash sha256:015373961494015e0d6ab9cdcff347c9bae30506b9fcac8874ce0a59191363f8

記住token,后面使用

8. 添加k8s-node節點

# node1 和node2節點上操作
kubeadm join 172.20.48.57:6443 --token h8qee8.ry1geq7ujkliir0x \
   --discovery-token-ca-cert-hash sha256:015373961494015e0d6ab9cdcff347c9bae30506b9fcac8874ce0a59191363f8

9.kubectl命令工具配置[master]

[root@k8s-master1 ~]# kubectl get node
NAME         STATUS     ROLES   AGE     VERSION
k8s-master1   NotReady   master   2m55s   v1.18.0
k8s-node1     NotReady   <none>   17s     v1.18.0
k8s-node2     NotReady   <none>   11s     v1.18.0

10. 安裝flanner插件

官網: https://github.com/coreos/flannel/
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

wget kube-flannel.yml的時候顯示連接失敗 是因為網站被牆了,建議在/etc/hosts文件添加一條 199.232.68.133 raw.githubusercontent.com 就可以正常下載了。 下載完成后創建並查看

kubectl  create -f kube-flannel.yml
[root@k8s-master1 ~]# kubectl  get po -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-ts2g2              0/1     Running   0          60m
coredns-7ff77c879f-zmgp7              0/1     Running   0          60m
etcd-k8s-master1                      1/1     Running   0          60m
kube-apiserver-k8s-master1            1/1     Running   0          60m
kube-controller-manager-k8s-master1   1/1     Running   0          60m
kube-flannel-ds-48mhv                 1/1     Running   0          103s
kube-flannel-ds-rphrr                 1/1     Running   0          103s
kube-flannel-ds-strdj                 1/1     Running   0          103s
kube-proxy-5mqpv                      1/1     Running   0          58m
kube-proxy-c4t86                      1/1     Running   0          58m
kube-proxy-gj9lv                      1/1     Running   0          60m
kube-scheduler-k8s-master1            1/1     Running   0          60m


# vim kube-flannel.yml
net-conf.json: |
    {
      "Network": "20.20.0.0/16",  # 修改為初始化時設置pod的網段
      "Backend": {
        "Type": "vxlan"
      }

11. 安裝doshbord界面

wget  https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f kuboard.yaml
kubectl get po -n kube-system

任意節點訪問: http://172.20.48.57:32567/login


# 獲取dashboard token, 也就是創建service account並綁定默認cluster-admin管理員集群角色
 kubectl create serviceaccount dashboard-admin -n kube-system
 kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
[root@k8s-master1 ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system  get secret | awk '/dashboard-admin/{print $1}')
Name:         dashboard-admin-token-bmw5k
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: dashboard-admin
              kubernetes.io/service-account.uid: 6f843fe6-10fc-41f3-a136-26690a68d33b

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6Ik5USkIxdElfTnVDUUpLclhwNW1TUW13VmtXWTRmQmJxcFVRQ0R3RHp1ZGcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tYm13NWsiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNmY4NDNmZTYtMTBmYy00MWYzLWExMzYtMjY2OTBhNjhkMzNiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.RHghwCqWONwRrGdmMKzaXrI30QPhXBYisj7i4T-0P9heDSdVkINJENIhzM1NK2SWG6CanOEqgMYQK4B0uqqAA4js-uws6C81M0RJUlU5Esoqum0ANLnemEA3sNh6zJw8WTwgKg52A05t1N1awIrA9fbDE4X8uX4qVZLAywqWCTR39EuINh8Ma4Qemvbzvv9-yS8JNQPn2gw83vpoNcU1og3ltkG5toPyqnttOty-wcfNNicQBaSUDQmVTai4yeLQD9xc8wty8O3iIsXuC37RkO2P3V2P8pUizqhkK3jitbrpS79R8IThsqEhni5Md7zQrGwK6vP2_qe5TCqLW1V8vg

12 刪除node節點

[root@k8s-master1 ~]# kubectl get node
NAME          STATUS   ROLES    AGE   VERSION
k8s-master1   Ready    master   47h   v1.18.0
k8s-node1     Ready    <none>   47h   v1.18.0
k8s-node2     Ready    <none>   47h   v1.18.0
[root@k8s-master1 ~]# kubectl delete node k8s-node2node "k8s-node2" deleted
[root@k8s-master1 ~]# kubectl get nodeNAME          STATUS   ROLES    AGE   VERSION
k8s-master1   Ready    master   47h   v1.18.0k8s-node1     Ready    <none>   47h   v1.18.0

13. 創建Token添加新node節點

默認token會保存24消失,過期后就不可用,如果需要重新建立token,可在master節點使用以下命令重新生成:

[root@k8s-master1 ~]# kubeadm   token create  ##  kubeadm token create --print-join-command
W0207 12:34:59.833174   21114 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
ari0w3.5516mkdspyse8mwo


[root@k8s-master1 ~]# kubeadm token  list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
ari0w3.5516mkdspyse8mwo   23h         2021-02-08T12:34:59+08:00   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
h8qee8.ry1geq7ujkliir0x   21h         2021-02-08T10:29:45+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
ogf4ei.uulghpvnq0sldbh1   22h         2021-02-08T11:09:46+08:00   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token

[root@k8s-master1 ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
015373961494015e0d6ab9cdcff347c9bae30506b9fcac8874ce0a59191363f8


新token加入集群方法:
kubeadm join 10.0.0.63:6443 --discovery-token ari0w3.5516mkdspyse8mwo --discovery-token-ca-cert-hash 3d847b858ed649244b4110d4d60ffd57f43856f42ca9c22e12ca33946673ccb4

14 添加master節點

kubeadm join 172.20.48.57:6443 --token 1xe1pj.9dtlyfcsuroyd13j     --discovery-token-ca-cert-hash sha256:015373961494015e0d6ab9cdcff347c9bae30506b9fcac8874ce0a59191363f8 --control-plane --certificate-key 58bcb304f1aeddc98c315e8cf30582779d4c2519e4d00513b6040783758b55db

9b65bea41bd75fbe3cda68fd757bd2741ab2676cc261c914bd79a3097a2219b3
55d7e0dc31eac63e78366dea26d4f100bf35213f5464203d3fd24c3d64b3ccc1


免責聲明!

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



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