首页 > 其他分享 >【k8s集群应用】Kubernetes二进制部署实例(master02+负载均衡)+Dashboard

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

时间:2024-12-19 15:58:34浏览次数:9  
标签:20.0 kubectl Kubernetes master02 nginx Dashboard kube 节点 6443

文章目录

配置指南

master02 节点上部署 Kubernetes 组件

  1. master01 节点复制证书文件、配置文件和服务管理文件到 master02 节点:
    scp -r /opt/etcd/ root@20.0.0.66:/opt/
    scp -r /opt/kubernetes/ root@20.0.0.66:/opt
    scp -r /root/.kube root@20.0.0.66:/root
    scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@20.0.0.66:/usr/lib/systemd/system/
    
  2. 修改 kube-apiserver 配置文件中的 IP 地址:
    vim /opt/kubernetes/cfg/kube-apiserver
    # 修改 --bind-address 和 --advertise-address 为 20.0.0.66
    
    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 节点上启动并设置服务开机自启:
    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 命令是否可用,并查看节点状态:
    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:

    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端口

    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端口

    nginx -t
    systemctl start nginx
    systemctl enable nginx
    netstat -natp | grep nginx 
    
  3. 安装 Keepalived 并配置:

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

    示例配置(MASTER 节点):

    # 接收邮件地址
    ! Configuration File for keepalived
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
     # 邮件发送地址
       notification_email_from Alexandre.Cassen@firewall.loc
       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配置的脚本
        }
    }
    

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

    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):
    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 节点的连接状态
    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:

    kubectl run nginx --image=nginx
    
  2. 查看 Pod 状态:

    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:

    curl <Pod IP>
    
  4. 查看 Pod 日志(如果需要):

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

    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字段以暴露到外部。
cd /opt/k8s
vim recommended.yaml

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

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命令应用修改后的配置。

kubectl apply -f recommended.yaml

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

创建名为dashboard-admin的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

获取并描述secret以获取token

获取dashboard-admin的token。

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

标签:20.0,kubectl,Kubernetes,master02,nginx,Dashboard,kube,节点,6443
From: https://blog.csdn.net/Karoku/article/details/144580044

相关文章

  • 云原生周刊:Kubernetes v1.32 正式发布
    云原生周刊:Kubernetesv1.32正式发布开源项目推荐HelmperHelmper简化了将HelmCharts导入OCI(开放容器倡议)注册表的过程,并支持可选的漏洞修复功能。它确保您的HelmCharts不仅安全存储,还能及时应用最新的安全修复。该工具完全兼容OCI标准,能够方便地与OCI注册表集成,自动......
  • Ubuntu 22.04 部署 Kubernetes v1.30
    1Shell工具xshell免费版,工具菜单下可选,同时控制所有的会话,后面不同节点安装Kubernetes会提高效率2节点规划Linux为UbuntuServer22.04,下载地址https://ubuntu.com/download/server域名IP资源节点名k8s-master192.168.0.1508C16Gk8s-masterk8s-node1......
  • Kubernetes Service 详解:如何轻松管理集群中的服务
    KubernetesService详解:如何轻松管理集群中的服务在Kubernetes中,Service是一个非常核心的概念。它解决了容器之间的通信问题,确保了无论容器如何启动或销毁,服务都能保持稳定的访问方式。今天,我想通过一篇简单易懂的文章,带大家一起探讨一下Kubernetes中的Service,它的作用......
  • 深入浅出 Kubernetes Deployment 滚动更新策略
    深入浅出KubernetesDeployment滚动更新策略在Kubernetes中,Deployment是管理无状态应用的一种重要资源类型,而滚动更新(RollingUpdate)是Deployment默认的升级方式。滚动更新通过逐步替换旧版本的Pod,确保应用升级时集群始终保持可用。而在这个过程中,Service的流量分......
  • 企业用户在使用Kubernetes时,面临成本和架构选择的挑战
    企业用户在使用Kubernetes时,面临成本和架构选择的挑战企业用户在使用Kubernetes时,面临的成本和架构选择的挑战主要体现在以下几个方面:基础设施成本:Kubernetes的部署通常需要强大的基础设施支持,包括计算资源、存储和网络设备。企业需要评估现有的IT基础设施是否能够支持......
  • 【K8s】专题十五(5):Kubernetes 网络之 CoreDNS
    本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口| 精选文章 | Kubernetes |Docker|Linux |羊毛资源 | 工具推荐 |往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决......
  • 【kubernetes】k8s集群的简述与搭建
    简述Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序关键特性自动化部署和回滚:Kubernetes可以自动化地部署和回滚应用程序,确保应用程序始终处于预期的状态。服务发现和负载均衡:Kubernetes提供内置的服务发现和负载均衡功能,确保流......
  • Kubernetes集群巡检内容
    1.概述Kubernetes集群巡检是一种监测和评估底层系统运行状况的重要手段,旨在快速发现系统中存在的潜在风险并提供修复建议。通过对Kubernetes(K8s)集群进行定期巡检,可以有效保障集群稳定性、优化资源利用率、提升安全性,并降低运维风险,特别是在生产环境中,这种预防性措施尤为重......
  • 在Ubuntu 22.04上搭建Kubernetes集群
    Kubernetes简介什么是Kubernetes?Kubernetes(常简称为K8s)是一个强大的开源平台,用于管理容器化应用程序的部署、扩展和运行。它最初由Google设计并捐赠给CloudNativeComputingFoundation(CNCF)来维护,现在已经成为容器编排领域的事实标准。Kubernetes的核心特性服务......
  • 【 Kubernetes 集群】Pod 网络无法访问排查处理
    本文档介绍TKE集群中多场景下可能发生的常见网络问题,并给出对应的排查思路。当遇到此类问题时,建议您首先按照下文中的检查建议进行排查,若确认检查项无误后仍不能正常访问,请您联系我们寻求帮助。集群中不同节点上的容器(Pod)无法互访同一集群中不同节点上的Pod可以直接互......