4.DNS和负载均衡

文章目录

  • coreDNS
    • 概念
    • 部署croeDNS
    • 测试
  • kubernetes多master集群结构
    • master节点部署
  • 负载均衡配置
    • 部署nginx做四层反向代理
    • 安装高可用 keepalived
    • nginx监控脚本
    • 修改k8s中组件的配置文件

coreDNS

概念

  • coreDNS是kubernetes的默认DNS实现。可以为集群中的service资源创建一个资源名称与clusterIP的对应关系解析

  • kubernetes可以选择使用DNS来避免将服务器的集群IP地址硬编码到您的引用程序中

  • K8S的DNS实现

    • coreDNS
    • 根据xervice资源的名称解析出clusterip
    • 根据statfulset控制器创建的pod资源名称解析出pod IP

部署croeDNS

##在所有的 node 节点上
#上传文件  coredns.tar  到 /opt/k8s#加载 coredns的镜像
docker load -i coredns.tar
##在master01节点
##上传 coredns.yaml  到 /opt/k8s
##安装 coredns
kubectl apply -f coredns.yaml
###查看所有命名空间下的pod资源
kubectl get pods -A

在这里插入图片描述

测试

###master01节点
###创建pods资源
kubectl create deployment ggl --image=nginx:latest --port=80
###查看pods
kubectl get pods -o wide

在这里插入图片描述

##授权,给kubectl绑定默认cluster-admin管理源集群角色,授权集群操作权限
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
##查看deployment
kubectl get deployment##创建service资源
kubectl expose deployment ggl --port=80 --name myapp-ggl --target-port=80##查看service资源
kubectl get service

在这里插入图片描述

###进入到pods中
kubectl exec -it pod名称 bash##在pods中配置DNS域名解析
cat /etc/resolv.conf##获取域名后缀
default.svc.cluster.local##查看指定 service 绑定
nslookup myapp-ggl.default.svc.cluster.local
  • CoreDNS 是 K8S 的默认 DNS 实现
    • 根据 service 资源名称 解析出 Cluster IP
    • 根据 statefulset 控制器创建的 Pod 资源名称 解析出 Pod IP
#DNS 解析测试
kubectl run -it --rm dns-test --image=busybox:1.28.4 shIf you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes
Server:    10.0.0.2
Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.localName:      kubernetes
Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local

在这里插入图片描述

kubernetes多master集群结构

###master02:192.168.242.69##使用同样的方式进行初始化操作
##要修改主机名

master节点部署

##从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
scp -r /opt/etcd/ root@192.168.242.69:/opt/
scp -r /opt/kubernetes/ root@192.168.242.69:/opt
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.242.69:/usr/lib/systemd/system/
scp -r /root/.kube root@192.168.242.69:/root
###master02
##修改配置文件cd /opt/kubernetes/cfgvim kube-scheduler.kubeconfig
vim kube-controller-manager.kubeconfig
vim /root/.kube/config
修改为   server: https://192.168.242.69:6443vim kube-apiserver
修改    --bind-address=192.168.242.69 \--secure-port=6443 \--advertise-address=192.168.242.69 \
##依次启动服务
systemctl enable --now kube-apiserver.service
systemctl enable --now kube-controller-manager.service
systemctl enable --now kube-scheduler.service
##为可执行文件创建软连接到系统目录中
ln -s /opt/kubernetes/bin/* /usr/local/bin/
###在  master02中也能够使用  kubectl 客户端
kubectl get pods

负载均衡配置

###利用 nginx + keepalived  做负载均衡
192.168.242.70
192.168.242.71
##关闭防火墙
systemctl disable --now firewalld
setenforce 0 
vim /etc/selinx/config

部署nginx做四层反向代理

###nginx  的 yum  源[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
##安装nginx
yum -y install nginx
##修改配置文件
cd /etc/nginx/
vim nginx.confuse epoll;stream {upstream k8s {server 192.168.242.66:6443;server 192.168.242.69:6443;}server {listen 6443;proxy_pass k8s;}
}
##启动nginx
nginx -t
systemctl enable --now nginxnetstat -lntp | grep nginx

安装高可用 keepalived

##安装 keepalivedyum -y install keepalived
###修改配置文件cd /etc/keepalived
cp keepalived.conf{,.bak}
vim keepalived.confglobal_defs {smtp_server 127.0.0.1router_id Nginx_01
}vrrp_script chk_nginx {###指定监控脚本的路径script "/etc/keepalived/nginx_check.sh"###检测的间隔时间interval 2###权重weight 2
}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 2weight 2
}vrrp_instance VI_1 {state MASTERinterface ens32virtual_router_id 51	priority 100advert_int 1					authentication {				auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.242.100}track_script {                   ###加载追踪模块chk_nginx}
}

nginx监控脚本

###创建监控脚本
vim /etc/keepalived/nginx_check.sh
###检测nginx是否启动的脚本
#!/bin/bash
if ! killall -0 nginx  &> /dev/null
thensystemctl stop keepalived
fi
vim nginx_check.sh
###给脚本添加执行权限
chmod +x nginx_check.sh
###启动  keepalivedsystemctl enable --now keepalived###查看VIP地址
ip a 

在这里插入图片描述

修改k8s中组件的配置文件

###修改node节点的配置文件cd /opt/kubernetes/cfg/vim bootstrap.kubeconfig
vim kubelet.kubeconfig
vim kube-proxy.kubeconfig修改为   server: https://192.168.242.100:6443
###重启服务
systemctl restart kubelet.service kube-proxy.service
###在负载均衡器中查看端口信息netstat -natp | grep nginx

在这里插入图片描述

###修改  kubectl 配置文件vim /root/.kube/config
修改为   server: https://192.168.242.100:6443

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cesium加载三维模型3dtiles

1.将数据和代码放到一个目录下 目的:为避免跨域 输入cmd命令 python3 -m http.server 5500 2.三维服务地址 http://127.0.0.1:5500/data/mars3d-max-shihua-3dtiles-master/tileset.json 3.模型网页地址 http://127.0.0.1:5500/cesium/cesium%E5%8A%A0%E8%BD%…

PyTorch中加载模型权重 A匹配B|A不匹配B

在做深度学习项目时,从头训练一个模型是需要大量时间和算力的,我们通常采用加载预训练权重的方法,而我们往往面临以下几种情况: 未修改网络,A与B一致 很简单,直接.load_state_dict() net ANet(num_cla…

TypeScript技能总结(三)

typescript是js的超集,目前很多前端框架都开始使用它来作为项目的维护管理的工具,还在不断地更新,添加新功能中,我们学习它,才能更好的在的项目中运用它,发挥它的最大功效 //泛型 > 参数和返回值类型相…

Java课设--学生信息管理系统(例1)

文章目录 前提一、运行效果二、Text实现类三、Manage选择类四、StudentWay学生方法类五、StudnetSql数据库类 前题 例1为无使用GUI图形界面,例2使用GUI图形界面! 首先自己的JDBC驱动已经接好了,连接自己的数据库没有问题。连接数据库可以看…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(33)-Fiddler如何抓取WebSocket数据包

1.简介 本来打算再写一篇这个系列的文章也要和小伙伴或者童鞋们说再见了,可是有人留言问WebSocket包和小程序的包不会抓,那就关于这两个知识点宏哥就再水两篇文章。 2.什么是Socket? 在计算机通信领域,socket 被翻译为“套接字…

物联网||不一样的点灯实验(2)|通过使用CMSIS库函数实现点灯实验-学习笔记(12)

文章目录 通过使用CMSIS库函数实现点灯实验1 如何使用CMIS库2 如何利用CMSIS库操作IO 两种实现方法的比较课后作业:完整代码:LED.C:test.c:led.h:systick.h:systick.c: 通过使用CMSIS库函数实现点灯实验 1 如何使用CMIS库 #####如何使用此驱动#####[. .](#)启用GPI…

langchain-ChatGLM源码阅读:参数设置

文章目录 上下文关联对话轮数向量匹配 top k控制生成质量的参数参数设置心得 上下文关联 上下文关联相关参数: 知识相关度阈值score_threshold内容条数k是否启用上下文关联chunk_conent上下文最大长度chunk_size 其主要作用是在所在文档中扩展与当前query相似度较高…

RichTextBox基本用法

作用:富文本编辑器,支持多种文本展示 常用属性: 允许显示多行 自动换行 展示滚动条 ScrollBars属性值: 1、Both:只有当文本超过RichTextBox的宽度或长度时,才显示水平滚动条或垂直滚动条,或两…

基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、讲解 💥1 概述 由于能源的日益匮乏,电力需求的不断增长等,配电网中分布式能源渗透率不断提高,且逐渐向主动配电网方…

掌握Java排序算法:实现主流排序方法与性能对比

一,C语言,主流的排序方法介绍 当谈论主流的排序方法时,通常指的是在实际应用中表现优秀且被广泛采用的排序算法。以下是常见的主流排序方法及其介绍、时间复杂度、空间复杂度和简单的C语言代码实现: 冒泡排序(Bubble S…

nginx使用

1 安装 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel yum install -y wget wget https://nginx.org/download/nginx-1.16.1.tar.gz tar -zxvf nginx-1.16.1.tar.gz cd nginx-1.16.1 ./configure --prefix/usr/local/nginx make make install2 目录 目录说…

【雕爷学编程】Arduino动手做(184)---快餐盒盖,极低成本搭建机器人实验平台2

吃完快餐粥,除了粥的味道不错之外,我对个快餐盒的圆盖子产生了兴趣,能否做个极低成本的简易机器人呢?也许只需要二十元左右 知识点:轮子(wheel) 中国词语。是用不同材料制成的圆形滚动物体。简…

Mac端口扫描工具

端口扫描工具 Mac内置了一个网络工具 网络使用工具 按住 Command 空格 然后搜索 “网络实用工具” 或 “Network Utility” 即可 域名/ip转换Lookup ping功能 端口扫描 https://zhhll.icu/2022/Mac/端口扫描工具/ 本文由 mdnice 多平台发布

C++中的常量介绍

C中的常量介绍 在C中,常量是一个固定的值,它在程序执行期间不会发生改变。常量可以分为: 1.字面常量 2.符号常量:符号常量是通过标识符来表示的常量值,在程序中使用时要先进行定义。使用符号常量的好处是可以给常量起…

JUnit教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。JUnit是由 Erich Gamma 和…

【具生智能】前沿思考与总结(DALL-E-Bot TinyBot)

1. DALL-E-Bot DALL-E-Bot: Introducing Web-Scale Diffusion Models to Robotics (robot-learning.uk) **(2023-05-04)**DALL-E-Bot: Introducing Web-Scale Diffusion Models to Robotics DALL-E-Bot:将网络规模的扩散模型引入机器人 第…

C语言----动态内存分配(malloc calloc relloc free)超全知识点

目录 一.动态内存函数 1.malloc 2.free 3.calloc 4.malloc和calloc的区别 5.realloc 二.动态内存分配的常见错误 1.对null进行解引用操作 2.对动态开辟空间的越界访问 3.对非动态开辟内存使用free释放 4.使用free释放动态开辟内存的一部分 5.对同一块动态内存多次…

物联网|按键实验---学习I/O的输入及中断的编程|读取I/O的输入信号|中断的编程方法|轮询实现按键捕获实验-学习笔记(13)

文章目录 实验目的了解擒键的工作原理及电原理图 STM32F407中如何读取I/O的输入信号STM32F407对中断的编程方法通过轮询实现按键捕获实验如何利用已有内工程创建新工程通过轮询实现按键捕获代码实现及分析1 代码的流程分析2 代码的实现 Tips:下载错误的解决 实验目的 了解擒键…

Leetcode-每日一题【剑指 Offer 09. 用两个栈实现队列】

题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [&…

如何快速做单元测试?

首先写unit test之前,要确认自己的测试遵循两个原则: 1、尽量不要干涉原来的代码。从阅读代码的体验来说,不要让你的测试(哪怕是一小段if..else...的代码)出现在你准备测试的代码中。 2、代码要只是测试某个class里面…