【k8s集群应用】Kubernetes二进制部署实例(master02+负载均衡)+Dashboard

文章目录

配置指南

master02 节点上部署 Kubernetes 组件

  1. master01 节点复制证书文件、配置文件和服务管理文件到 master02 节点:

    bash 复制代码
    scp -r /opt/etcd/ [email protected]:/opt/
    scp -r /opt/kubernetes/ [email protected]:/opt
    scp -r /root/.kube [email protected]:/root
    scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service [email protected]:/usr/lib/systemd/system/
  2. 修改 kube-apiserver 配置文件中的 IP 地址:

    bash 复制代码
    vim /opt/kubernetes/cfg/kube-apiserver
    # 修改 --bind-address 和 --advertise-address 为 20.0.0.66
    ini 复制代码
    KUBE_APISERVER_OPTS="--logtostderr=true \
    --v=4 \
    --etcd- servers=https://20.0.0.10:2379,https://20.0.0.58:2379,https://20.0.0.59:2379 \
    --bind-address=20.0.0.66 \				#修改
    --secure-port=6443 \
    --advertise-address=20.0.0.66 \			#修改
    ......
  3. master02 节点上启动并设置服务开机自启:

    bash 复制代码
    systemctl start kube-apiserver.service
    systemctl enable kube-apiserver.service
    systemctl start kube-controller-manager.service
    systemctl enable kube-controller-manager.service
    systemctl start kube-scheduler.service
    systemctl enable kube-scheduler.service
  4. 验证 kubectl 命令是否可用,并查看节点状态:

    bash 复制代码
    ln -s /opt/kubernetes/bin/* /usr/local/bin/
    kubectl get nodes
    kubectl get nodes -o wide
    #-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名

此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来

配置负载均衡器(Nginx + Keepalived)

lb01lb02 节点上操作

  1. 配置 Nginx 的官方在线 yum 源并安装 Nginx:

    bash 复制代码
    cat > /etc/yum.repos.d/nginx.repo << 'EOF'
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/\$basearch/
    gpgcheck=0
    EOF
    yum install nginx -y
  2. 修改 Nginx 配置文件以配置四层反向代理负载均衡:

    配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口

    bash 复制代码
    vim /etc/nginx/nginx.conf
    # 添加 stream 块
    stream {
        log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
        access_log  /var/log/nginx/k8s-access.log  main;
    
        upstream k8s-apiserver {
            server 20.0.0.10:6443;
            server 20.0.0.66:6443;
        }
        server {
            listen 6443;
            proxy_pass k8s-apiserver;
        }
    }

    检查配置文件语法并启动 Nginx,查看已监听6443端口

    bash 复制代码
    nginx -t
    systemctl start nginx
    systemctl enable nginx
    netstat -natp | grep nginx 
  3. 安装 Keepalived 并配置:

    bash 复制代码
    yum install keepalived -y
    vim /etc/keepalived/keepalived.conf
    # 根据节点角色(MASTER 或 BACKUP)修改配置
    # lb01 为 MASTER,lb02 为 BACKUP

    示例配置(MASTER 节点):

    ini 复制代码
    # 接收邮件地址
    ! Configuration File for keepalived
    global_defs {
       notification_email {
         [email protected]
         [email protected]
         [email protected]
       }
     # 邮件发送地址
       notification_email_from [email protected]
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id NGINX_MASTER#lb02节点的为 NGINX_BACKUP
    }
    # 添加一个周期性执行的脚本
    vrrp_script check_nginx {
        script "/etc/nginx/check_nginx.sh"
    }
    
    vrrp_instance VI_1 {
        state MASTER #lb02节点的为 BACKUP
        interface ens33 #指定网卡名称 ens33
        virtual_router_id 51 #指定vrid,两个节点要一致
        priority 100 #lb01节点的为 100,lb02节点的为 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            20.0.0.100/24 #指定 VIP
        }
        track_script {
            check_nginx #指定vrrp_script配置的脚本
        }
    }

    创建检查脚本并赋予执行权限

    bash 复制代码
    vim /etc/nginx/check_nginx.sh
    #!/bin/bash
    count=$(ps -ef | grep nginx | egrep -cv "grep|$$")
    if [ "$count" -eq 0 ];then
        systemctl stop keepalived
    fi
    chmod +x /etc/nginx/check_nginx.sh
    # 启动 Keepalived
    systemctl start keepalived
    systemctl enable keepalived
    # 检查 VIP 是否生成
    ip a

修改 Node 节点上的配置文件并使用 VIP

  1. 在所有 Node 节点上,修改 bootstrap.kubeconfigkubelet.kubeconfigkube-proxy.kubeconfig 文件中的 server 地址为 VIP(20.0.0.100):

    bash 复制代码
    cd /opt/kubernetes/cfg/
    vim bootstrap.kubeconfig
    # 修改 server 地址为 https://20.0.0.100:6443
    vim kubelet.kubeconfig
    # 修改 server 地址为 https://20.0.0.100:6443
    vim kube-proxy.kubeconfig
    # 修改 server 地址为 https://20.0.0.100:6443
    # 重启 kubelet 和 kube-proxy 服务
    systemctl restart kubelet.service
    systemctl restart kube-proxy.service
  2. 在 lb01 上查看 nginx 和 node 、 master 节点的连接状态

    bash 复制代码
    netstat -natp | grep nginx
    tcp        0      0 0.0.0.0:6443            0.0.0.0:*               LISTEN      44904/nginx: master 
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      44904/nginx: master 
    tcp        0      0 20.0.0.100:6443     20.0.0.59:46954     ESTABLISHED 44905/nginx: worker 
    tcp        0      0 20.0.0.13:45074     20.0.0.10:6443      ESTABLISHED 44905/nginx: worker 
    tcp        0      0 20.0.0.13:53308     20.0.0.66:6443      ESTABLISHED 44905/nginx: worker 
    tcp        0      0 20.0.0.13:53316     20.0.0.66:6443      ESTABLISHED 44905/nginx: worker 
    tcp        0      0 20.0.0.100:6443     20.0.0.58:48784     ESTABLISHED 44905/nginx: worker 
    tcp        0      0 20.0.0.13:45070     20.0.0.10:6443      ESTABLISHED 44905/nginx: worker 
    tcp        0      0 20.0.0.100:6443     20.0.0.58:48794     ESTABLISHED 44905/nginx: worker 
    tcp        0      0 20.0.0.100:6443     20.0.0.59:46968     ESTABLISHED 44905/nginx: worker 

master01 节点上测试 Pod 的创建和访问

  1. 测试创建 Pod:

    bash 复制代码
    kubectl run nginx --image=nginx
  2. 查看 Pod 状态:

    bash 复制代码
    kubectl get pods 
    NAME                    READY   STATUS              RESTARTS   AGE
    nginx-dbddb74b8-nf9sk   0/1     ContainerCreating   0          33s   #正在创建中
    
    kubectl get pods
    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-dbddb74b8-nf9sk   1/1     Running   0          80s  			#创建完成,运行中
    
    kubectl get pods -o wide
    NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE
    nginx-dbddb74b8-26r9l   1/1     Running   0          10m   172.17.36.2   20.0.0.14   <none>
    //READY为1/1,表示这个Pod中有1个容器
  3. 在对应网段的 Node 节点上使用浏览器或 curl 命令访问 Pod:

    bash 复制代码
    curl <Pod IP>
  4. 查看 Pod 日志(如果需要):

    bash 复制代码
    kubectl logs <Pod 名称>
  5. (可选)绑定默认 cluster-admin 管理员集群角色,授权集群操作权限(如果执行失败):

    bash 复制代码
    kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

Dashboard

Dashboard 介绍

仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)。例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。

部署Dashboard

在Kubernetes集群的master01节点上部署

上传recommended.yaml文件到/opt/k8s目录

修改recommended.yaml文件

  • 使用vim或其他文本编辑器打开recommended.yaml文件,并找到Kubernetes Dashboard的Service部分。
  • 默认Dashboard只能集群内部访问,所以将Service类型修改为NodePort,并添加nodePort字段以暴露到外部。
bash 复制代码
cd /opt/k8s
vim recommended.yaml

在文件中找到并修改Service部分如下:

yaml 复制代码
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001     # 添加此行
  type: NodePort          # 修改此行
  selector:
    k8s-app: kubernetes-dashboard

应用修改后的recommended.yaml文件

使用kubectl apply命令应用修改后的配置。

bash 复制代码
kubectl apply -f recommended.yaml

创建service account并绑定默认cluster-admin管理员集群角色

创建名为dashboard-admin的service account,并绑定到cluster-admin角色。

bash 复制代码
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

获取并描述secret以获取token

获取dashboard-admin的token。

bash 复制代码
Skubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

访问Dashboard

https://NodeIP:30001
NodeIP是Kubernetes集群中任意节点的IP地址。

在登录页面使用前面获取的token进行登录。

复制代码
https://NodeIP:30001
相关推荐
阿里云云原生13 小时前
LLM 不断提升智能下限,MCP 不断提升创意上限
云原生
阿里云云原生13 小时前
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
云原生
数据智能老司机15 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机16 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
宁zz16 小时前
乌班图安装jenkins
运维·jenkins
云上艺旅16 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
松果猿16 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
工业通讯探索者16 小时前
ProfiNet转CANopen协议转换网关驱动新能源汽车生产线多轴同步控制
自动化·工业物联网·协议转换网关·网关模块·总线协议
c无序16 小时前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
FixBug_Nick16 小时前
使用Docker安装及使用最新版本的Jenkins
docker·容器·jenkins