# kubernetes集群(centos)

centos7安装kubernetes集群

  • 参考博客 https://blog.csdn.net/mo_sss/article/details/135749235

172.17.110.248 root Aw&bfBmdTM42^ra8@=c&8 集群 172.17.110.249 172.17.110.250(172.17.110.241) 172.17.110.251

备用 172.17.110.241 172.17.110.242 172.17.110.243

# 环境准备

  1. 服务器配置

    节点 ip地址 hostname主机名 运行内存mem 内存
    控制台节点master 172.17.110.249 iZ2zed9mcoaawq0yri5sieZ 8G 16G
    工作节点worker1 172.17.110.250 iZ2zed9mcoaawq0yri5sifZ 8G 16G
    工作节点worker2 172.17.110.251 iZ2zed9mcoaawq0yri5sigZ 8G 16G
  2. 软件配置

软件 版本 作用
Docker 20.10.24 作为k8s的容器运行时环境
Kubernetes 1.23.0 包含了kubectl、kubeadm、kubelet,是k8s所需的组件
Flannel 0.24.0 网络组件,构建pod之间建立连接互通
  1. 涉及开放的端口 master 6443,10250,10251,10252 worker1 10250

  2. 主机名与ip绑定

cat >> /etc/hosts <<EOF
172.17.110.249 iZ2zed9mcoaawq0yri5sieZ
172.17.110.250 iZ2zed9mcoaawq0yri5sifZ
172.17.110.251 iZ2zed9mcoaawq0yri5sigZ
EOF

# 安装K8S(集群的3台机器都要执行)

  1. 添加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
    EOF
    

    查看已添加的内容

    cat /etc/yum.repos.d/kubernetes.repo
    

    更新yum资源包

    yum makecache
    
  2. 安装k8s组件

    #指定版本安装
    yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
    或
    #默认安装
    sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    
  3. 设置开机自启

    systemctl enable --now kubelet
    
  4. 查看kubelet状态

    systemctl status kubelet
    
  5. 查看kubectl版本

    kubectl version
    

    查看kubeadm版本

    yum info kubeadm
    
  6. 配置自动补全命令(可跳过)

    yum install bash-completion -y
    

    设置kubectl命令补全,下次login生效

    kubectl completion bash >/etc/bash_completion.d/kubectl
    

    设置kubeadm命令补全,下次login生效

    kubeadm completion bash > /etc/bash_completion.d/kubeadm
    

# 卸载k8s

#停止Kubernetes相关服务
sudo systemctl stop kubelet
#Docker作为容器运行时,也需要停止Docker服务
sudo systemctl stop docker
#卸载kubelet,kubeadm和kubectl
sudo yum remove kubeadm kubectl kubelet
#删除数据文件
sudo rm -rf /etc/kubernetes  
sudo rm -rf /var/lib/kubelet
#确认删除状态(显示“inactive (dead)”)
sudo systemctl status kubelet

# 初始化master节点(只在master节点执行)

  1. 查看镜像

    #指定版本
    kubeadm config images list --kubernetes-version v1.23.0
    或
    #不指定版本
    kubeadm config images list
    

    查看阿里云镜像仓库地址中的镜像列表

    kubeadm config images list  --image-repository registry.aliyuncs.com/google_containers
    
  2. 拉取镜像

    kubeadm config images pull  --image-repository registry.aliyuncs.com/google_containers
    
  3. 初始化操作

    kubeadm init \
      --apiserver-advertise-address=172.17.110.249 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.23.0 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16 \
      --ignore-preflight-errors=all
    
    #在master节点执行(--ttl 8760h  一年有效)
    kubeadm token create --ttl 8760h --print-join-command
    
    #查看kubeadm所有token
    kubeadm token list
    
    #错误 The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz
    
    
    #是否配置cgroup
    cat > /etc/docker/daemon.json <<EOF
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
    
    #重启docker
    systemctl restart docker
    

    image-20240527112701172

    初始化成功复制kubeadm join

    kubeadm join 172.17.110.249:6443 --token ggrsq8.eickidjyxva09p4a \
            --discovery-token-ca-cert-hash sha256:5c4631fd88c5c6ae845b231d56b953992fb20b52c8e65769be6c3441f0d2d1e7
    
  4. 重置kubeadm(如初始化失败)

kubeadm reset

sudo rm -fr ~/.kube/  /etc/kubernetes/* var/lib/etcd/*

# 搭建集群(master节点)

# 1. 配置.kube

创建kube文件

mkdir -p $HOME/.kube

将admin.conf文件复制到kube文件夹下的config

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

修改文件权限,从文件所有者修改为文件所有者所在的组中的其他用户,user–>group

sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 2. 配置.bash_profile

  1. 配置.bash_profile,追加内容到最下边
vim /root/.bash_profile

export KUBECONFIG=/etc/kubernetes/admin.conf
alias k=kubectl
source <(kubectl completion bash)

image-20240527115800630

  1. 激活.bash_profile
source /root/.bash_profile

# 3. 配置网络

  1. 安装wget

    yum install -y wget
    
  2. 下载kube-flannel.yml

        wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    
  3. 网段确认,net-config.json的网段值与执行kubeadm init 输入的网段一致

    cat kube-flannel.yml
    
    net-conf.json: |
      {
        "Network": "10.244.0.0/16",
        "Backend"": {
          "Type": "vxlan"
      }
    }
    
  4. 部署flannel

    kubectl apply -f kube-flannel.yml
    
    kubectl delete -f kube-flannel.yml
    

    image-20240527120559946

  5. 查看kube-flannel服务状态 确保flannel对应的pod状态为Running才可正常使用 查看所有pod状态,其中包含kube-flannel

    kubectl get pod --all-namespaces
    
  6. 查看系统容器状态

    kubectl get pod -n kube-system
    
  7. 主节点状态获取

    kubectl get cs
    
  8. 查看集群中的节点信息

    kubectl get nodes
    

# 节点加入集群(worker节点)

# 1.加入集群命令

获取主节点上获取的join命令,在从节点执行

kubeadm join 172.17.110.249:6443 --token ggrsq8.eickidjyxva09p4a \
        --discovery-token-ca-cert-hash sha256:5c4631fd88c5c6ae845b231d56b953992fb20b52c8e65769be6c3441f0d2d1e7

image-20240527124246396

master节点查看集群

kubectl get nodes

如果token失效,需在master节点重新获取

#在master节点执行(--ttl 8760h  一年有效)
kubeadm token create --ttl 8760h --print-join-command

# 从节点中使用kubectl命令

  1. 从节点执行kubectl get nodes

从节点无法执行,因为在主节点中生成了admin.conf文件,从节点中没有,此文件授权kubectl命令的使用,需要将其复制到从节点并配置环境变量使之生效即可

  1. 查看admin.conf文件(在主节点)

    ls /etc/kubernetes/
    
  2. 复制文件(在主节点)

    如无法通过scp复制,可选择sz,rz方式

    sudo scp /etc/kubernetes/admin.conf root@iZ2zed9mcoaawq0yri5sifZ:/etc/kubernetes/
    sudo scp /etc/kubernetes/admin.conf root@iZ2zed9mcoaawq0yri5sigZ:/etc/kubernetes/
    
  3. 从节点查看(从节点)

    ls /etc/kubernetes
    
  4. 配置环境变量(从节点)

    sudo vim /etc/profile
    
    export KUBECONFIG=/etc/kubernetes/admin.conf
    
    #使环境变量生效
    source /etc/profile
    
    

    image-20240527130629577

  5. 从节点中使用kubectl命令查看集群节点

    kubectl get nodes
    

# 删除从节点

# 1. 释放节点(主节点)

#以从节点iZ2zed9mcoaawq0yri5sigz为例
kubectl drain iz2zed9mcoaawq0yri5sigz --delete-local-data --force --ignore-daemonsets

# 2. 删除节点(主节点)

#以从节点iZ2zed9mcoaawq0yri5sigZ为例
kubectl delete node iz2zed9mcoaawq0yri5sigz

# 3. 重置配置(从节点)

kubeadm reset

# 4. 删除文件(从节点)

#删除文件
sudo rm -rf /etc/cni/net.d/
sudo rm -rf /root/.kube/config

kubeadm join 172.17.110.249:6443 --token 6sbi77.y55tl41ohi02zw3x --discovery-token-ca-cert-hash sha256:bf094a990545eb845a3fd871b8507db3d0681ee5eeb466aeb22400c53f99068d


#删除CNI(如需)
ifconfig cni0 down
ip link delete cni0
#删除fannel(如需)
ifconfig flannel.1 down
ip link delete flannel.1

# Dashboard配置(主节点)

使用dashboard作为可视化界面管理k8s集群

# 1. 下载并安装dashboard


wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

kubectl apply -f recommended.yaml

#删除
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

# 2. 添加用户

vim dash-user.yml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
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

#运行dash-user
kubectl apply -f dash-user.yml

kubectl delete -f dash-user.yml

kubectl delete svc kubernetes-dashboard --namespace=kubernetes-dashboard

kubectl get pod --namespace=kubernetes-dashboard

kubectl delete pod dashboard-metrics-scraper-6f669b9c9b-4zwls --namespace=kubernetes-dashboard

# 3. 获取token

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

#获取的token值
eyJhbGciOiJSUzI1NiIsImtpZCI6Im9lZVRqSG5SVjk2cE5ocVdkeHlVbEl0Ulhld08yMERWcVQwRXVySEV5d0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXBtcm40Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIzNGUxMDM5YS1jNTc5LTQ2ODUtYjg2OS1mNWNiMTk2ZjE5ZGQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.f68jV_mfBP7CwpuOk1cfJB_Ee5vUkd5KprQIcMGWOYYs1tRNJ5ffUGG7gSBmdLke04YYuPMefQbuOrqpBQbtJOCI47B2tQmlf_giTaJY1aJdFc2PqaDGS3M-DDOJJ40AU0eju-bjIQcSyAdg88LG_kxwe0KuEwiSYNxZXBHhsup7Tg_r4xMY01j7JMzCf2RmZEADoW3EmqawjCgG2aZnuKpkbBElygD0r2GtGLDurCF-6q7n_EtXcJsCxgE6g-YtXZueNhGdsHUY8HidUxYAeKiugr7wNlMvUOX4yrG0qa6WXHLr-wiylpRrDtjJvhW2dWy1fKl2WrVDdD3-UmumJQ

image-20240527133740700

# 4. 访问dashboard(需要跳板机,不适用当前服务器环境)

  1. 查看dashboard服务的端口
kubectl get svc -n kubernetes-dashboard
或
kubectl get service kubernetes-dashboard -n kubernetes-dashboard
  1. # 修改type的值

    修改service的type改为NodePort,暴露到外部进行访问

    kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
    
  2. # 再次查看端口

    image-20240527134032928

  3. # IP获取

    查看服务名对应的ip

    kubectl get pods -n kubernetes-dashboard -o wide | grep kubernetes-dashboard
    

    image-20240527134247234

  4. # 访问dashboard

https://172.17.110.250:30160

image-20240527134330011

将token复制粘贴进去

image-20240527134425585

# Kuboard(k8s后台系统)


#启动
kubectl apply -f kuboard-v3.yaml

#修改镜像地址
meteorplan/etcd-host:3.4.16-2
meteorplan/eipwork-kuboard:v3

#停止
kubectl delete -f kuboard-v3.yaml


#Kuboard访问
http://172.17.110.249:30080/
用户名:admin
密码:Kuboard123

image-20240612164103572