21.Kubernetes(三)-----集群部署(service)
service
- 一、简介
- 二、开启kube-proxy的ipvs模式:
- 三、创建service:(NodePort方式)
- 四、指定一个 LoadBalancer 类型的 Service
- 1.下载镜像
- 2.上传镜像
- 3.实现负载均衡
- 五、service允许为其分配一个公有IP
- 六、k8s网络通信,配置flannel
- 模式修改为host-gw
一、简介
- Service 是由 kube-proxy 组件,加上 iptables 来共同实现的.
• kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的
iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的
CPU资源。
• IPVS模式的service,可以使K8s集群支持更多量级的Pod。
二、开启kube-proxy的ipvs模式:
[root@server4 pod]# kubectl -n kube-system get pod |grep proxy[root@server4 pod]# kubectl -n kube-system get pod -o wide |grep proxy[root@server4 pod]# kubectl -n kube-system get cm[root@server4 pod]# kubectl -n kube-system get cm kube-proxy[root@server4 pod]# kubectl edit cm kube-proxy -n kube-system
configmap/kube-proxy edited
[root@server4 pod]# kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
pod "kube-proxy-cmq2v" deleted
pod "kube-proxy-hqzkh" deleted
pod "kube-proxy-mjzh2" deleted
[root@server4 pod]# ip addr
三、创建service:(NodePort方式)
[root@server4 pod]# vim svc.yaml #创建service:(NodePort方式)
[root@server4 pod]# kubectl edit svc mysvc
service/mysvc edited
[root@server4 pod]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo ClusterIP 10.97.29.222 <none> 80/TCP 23h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d23h
mysvc NodePort 10.100.22.177 <none> 80:31525/TCP 4m18s
[root@server4 pod]# netstat -antlp | grep 31525[root@server4 pod]# kubectl run demo --image=busyboxplus -it
If you don't see a command prompt, try pressing enter.
/ # nslookup nginx-svc
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local[root@server4 pod]# dig -t A nginx-svc.default.svc.cluster.local. @10.96.0.10
四、指定一个 LoadBalancer 类型的 Service
1.下载镜像
[root@foundation15 ~]# lftp 172.25.254.250
lftp 172.25.254.250:~> cd pub/docs/k8s/
cd ok, cwd=/pub/docs/k8s
lftp 172.25.254.250:/pub/docs/k8s> get metallb.yaml
8447 bytes transferred
lftp 172.25.254.250:/pub/docs/k8s> get metallb-v0.10.2.tar
90602496 bytes transferred
lftp 172.25.254.250:/pub/docs/k8s> exit
[root@foundation15 ~]# ls3.0.115 manifests rht-ks-post.logcompose metallb-v0.10.2.tar rht-ks-pre.logdaemon.json metallb.yaml root@172.25.15.1get-docker.sh Pictures root@172.25.15.4k8s-1.21.3.tar 'rhel6 lanmp.pdf' zabbix.apikube-flannel.yml rhel-server-7.6-x86_64-dvd.iso
[root@foundation15 ~]# scp metallb-v0.10.2.tar metallb.yaml 172.25.15.4:
root@172.25.15.4's password:
metallb-v0.10.2.tar 100% 86MB 106.3MB/s 00:00
metallb.yaml 100% 8447 374.5KB/s 00:00
[root@foundation15 ~]#
2.上传镜像
[root@server4 ~]# ls
kube-flannel.yml metallb-v0.10.2.tar metallb.yaml pod
[root@server4 ~]# docker load -i metallb-v0.10.2.tar
b2d5eeeaba3a: Loading layer 5.88MB/5.88MB
a273cec6d851: Loading layer 40.54MB/40.54MB
Loaded image: reg.westos.org/metallb/controller:v0.10.2
b763436ff23f: Loading layer 44.15MB/44.15MB
Loaded image: reg.westos.org/metallb/speaker:v0.10.2
[root@server4 ~]# docker push reg.westos.org/metallb/speaker:v0.10.2
The push refers to repository [reg.westos.org/metallb/speaker]
b763436ff23f: Pushed
b2d5eeeaba3a: Pushed
v0.10.2: digest: sha256:b5e9cb99c22f8379238784b611bc3ddde18120f9a4b7481ea888ed9c72854222 size: 952
[root@server4 ~]# docker push reg.westos.org/metallb/controller:v0.10.2
The push refers to repository [reg.westos.org/metallb/controller]
a273cec6d851: Pushed
b2d5eeeaba3a: Mounted from metallb/speaker
v0.10.2: digest: sha256:1ed3d2bf860220557b0d862d0f4fc07ae84b33def79595489041186906e58e3d size: 952
[root@server4 ~]#
3.实现负载均衡
在service提交后,Kubernetes就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP地址配置给负载均衡服
务做后端。
[root@server4 metallb]# ls
configmap.yaml lb-svc.yaml metallb.yaml
[root@server4 metallb]# kubectl apply -f lb-svc.yaml
service/lb-svc unchanged
[root@server4 metallb]# kubectl apply -f configmap.yaml
configmap/config unchanged
[root@server4 metallb]# kubectl apply -f metallb.yaml [root@server4 metallb]# kubectl apply -f lb-svc.yaml
service/lb-svc unchanged
[root@server4 metallb]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo ClusterIP 10.97.29.222 <none> 80/TCP 24h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d
lb-svc LoadBalancer 10.103.125.6 172.25.15.10 80:32421/TCP 5m20s
[root@server4 metallb]# [root@foundation15 ~]# curl 172.25.15.10
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@foundation15 ~]# curl 172.25.15.10/hostname.html
replicaset-example-j4lt7
[root@foundation15 ~]# curl 172.25.15.10/hostname.html
replicaset-example-9hbdm
五、service允许为其分配一个公有IP
[root@server4 metallb]# ls
configmap.yaml lb-svc.yaml metallb.yaml
[root@server4 metallb]# vim ext-ip.yaml
[root@server4 metallb]# cat ext-ip.yaml
apiVersion: v1
kind: Service
metadata:name: ex-service
spec:selector:app: myappports:- name: httpprotocol: TCPport: 80targetPort: 80externalIPs:- 172.25.15.100
[root@server4 metallb]# kubectl apply -f ext-ip.yaml
service/ex-service created
[root@server4 metallb]# kubectl get svc
- 一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。
- • Ingress由两部分组成:Ingress controller和Ingress服务。
- • Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes专门维护了对应的 Ingress Controller。
[root@server4 metallb]# vim ex-svc.yaml
apiVersion: v1
kind: Service
metadata:name: my-service
spec:type: ExternalNameexternalName: www.westos.org[root@server4 metallb]# kubectl apply -f ex-svc.yaml
service/my-service created
[root@server4 metallb]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo ClusterIP 10.97.29.222 <none> 80/TCP 26h
ex-service ClusterIP 10.110.22.46 172.25.15.100 80/TCP 93m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d2h
lb-svc LoadBalancer 10.103.125.6 172.25.15.10 80:32421/TCP 129m
my-service ExternalName <none> www.westos.org <none> 4s
[root@server4 metallb]# kubectl edit svc my-service
service/my-service edited
[root@server4 metallb]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo ClusterIP 10.97.29.222 <none> 80/TCP 27h
ex-service ClusterIP 10.110.22.46 172.25.15.100 80/TCP 94m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d2h
lb-svc LoadBalancer 10.103.125.6 172.25.15.10 80:32421/TCP 129m
my-service ExternalName <none> www.baidu.com <none> 39s
[root@server4 metallb]# dig -t A my-service.default.svc.cluster.local. @10.96.0.10
六、k8s网络通信,配置flannel
flannel支持多种后端:
Vxlan
vxlan //报文封装,默认
Directrouting //直接路由,跨网段使用vxlan,同网段使用host-gw模式。
host-gw: //主机网关,性能好,但只能在二层网络中,不支持跨网络, 如果有成千上万的Pod,容易产生广播风暴,不推荐
UDP: //性能差,不推荐
[root@server4 ~]# cd pod
[root@server4 pod]# ls
cronjob.yaml headless.yaml job.yaml pod.yaml svc.yaml
deployment.yaml init.yaml perl.tar rs.yaml
[root@server4 pod]# kubectl apply -f deployment.yaml
deployment.apps/nginx-deployment created
模式修改为host-gw
[root@server4 ~]# kubectl -n kube-system get pod
[root@server4 ~]# kubectl -n kube-system edit cm kube-flannel-cfgnet-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "host-gw" #模式修改}}[root@server4 ~]# kubectl -n kube-system get pod[root@server4 ~]# kubectl get pod -n kube-system |grep kube-flannel | awk '{system("kubectl delete pod "$1" -n kube-system")}'
[root@server4 ~]# kubectl get pod -o wide
[root@server4 ~]# route -n
[root@server2 ~]# route -n
[root@server3 ~]# route -n
21.Kubernetes(三)-----集群部署(service)相关推荐
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes二进制集群部署+Web管理界面+kubectl 命令管理+YAML文件详解(集合)
Kubernetes---- 二进制集群部署(ETCD集群+Flannel网络) Kubernetes----单节点部署 Kubernetes----双master节点二进制部署 Kubernetes ...
- Kubernetes(k8s)集群部署七、k8s网络通信+service扩展ingress(TLS,认证,地址重写)calico网络插件(允许指定pod访问服务,禁止其他namespace访问服务)
k8s网络通信 k8s网络通信 1.容器间通信 2.pod之间的通信 2.1同一节点的pod 2.2不同节点的pod之间的通信 flannel网络原理 flannel支持多种后端: 3.pod和ser ...
- Centos7 安装部署Kubernetes(k8s)集群过程
1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...
- 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信
目录 一.Kubernetes简介 1.Kubernetes简介 2.kubernetes设计架构 3.Kubernetes核心组件 4.kubernetes设计结构 二.Kubernetes部署 1 ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三
在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...
- 二进制安装kubernetes v1.11.2 (第十章 kube-scheduler集群部署)
继续前一章的部署. 十.kube-scheduler集群部署 该集群包含2个节点,启动后通过竞争选举机制产生一个leader节点,其他节点为阻塞状态.当leader节点不可用后,剩余的节点将再次进行选 ...
- K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程
K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...
- Kubernetes 二进制方式集群部署(单节点多节点)
目录 一.K8S 单 Master 节点二进制部署 1. 环境部署 2. 部署 etcd 集群 2.1 创建 k8s 工作目录 2.2 编写 etcd-cert.sh 和 etcd.sh 脚本 2.3 ...
- Kubernetes单节点部署----二进制集群部署(ETCD集群+Flannel网络)
文章目录 环境部署 开局优化 master节点操作etcd 集群部署 开始制作证书 node节点加入ETCD集群(实现内部通信) node1/2节点操作 docker安装 flannel网络配置 ma ...
最新文章
- 通过java.util.concurrent写多线程程序
- 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)
- Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别
- Git-将已有的项目转换为GIT项目托管到 GITHUB 仓库
- layui table工具栏点击时间_layui table表格上添加日期控件laydate
- client中周期性边界_FLUENT创建周期性边界条件方法
- java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器
- 计算三角形面积(信息学奥赛一本通-T1034)
- SpringBoot启动o.s.b.d.LoggingFailure… 错误解决方法
- Unity3D游戏开发之换装系统的实现
- 基于echarts的数据可视化模板[开箱即用]
- python 华泰股票交易接口_TradeApi 自带资金管理的A股程序化交易接口
- 可以装虚拟机的云服务器,云服务器可以装虚拟机吗
- 在线客服功能介绍-了解常见在线客服系统的功能点
- 谷粒商城-商城业务(商品上架)
- leetcode 每天10道travl
- 美国旅游签证办理流程
- HDLBits练习(三)多路复用器,算术电路,卡诺图电路
- 制作Java视频播放器
- 《黄金瞳》 台词:你人真好!
热门文章
- 苹果CMS Mxone Pro开源版无加密v7.2
- Spring 的getBeanNamesForType和getBean联合使用
- 【那些年,我们一起追的女孩】第十七章
- segfault rip rsp error
- 34、基于51单片机锂电池电压电流容量检测仪表LCD液晶显示 原理图PCB程序设计
- 基于APK加速启动时间的Android系统资源优化
- 小明酱的暑期求职纪【version 2.0】
- 如何在 R 中绘制 Beta 分布
- Python 如何让自己的代码更有逼格 pythonic
- Debezium报错处理系列之三十八:Timeout expired while fetching topic metadata