云平台
文章平均质量分 57
k8s+docker
古月的三个锦囊
Java开发
展开
-
kubernetes如何实现自定义HAP之QPS
1 背景公司本来用的是普通的基于CPU和内存的HPA扩容策略,但是运维发现效果并不是太好,所以开发这边花点时间去研究一下自定义HPA,希望达到的目的大概是这样:比如一个service下当前只有一个pod,这个pod能抗的并发是100,那么假如当前的并发变成了300,那么此时HPA就应该要能监测到这个变化,将pod扩容为3个。2 理论基础1 普罗米修斯第一种 Metrics,是宿主机的监控数据。这部分数据的提供,需要借助一个由 Prometheus 维护的Node Exporter 工具。一般来说,原创 2022-05-10 18:24:21 · 1037 阅读 · 0 评论 -
17分析veth pair设备创建后无法互ping的问题
1、创建了一个veth pair设备,且设置ip地址ip link add veth0 type veth peer name veth1ip addr add 192.168.1.101/24 dev veth0ip addr add 192.168.1.102/24 dev veth1ip link set veth0 up ip link set veth1 up2、创建完成后此时两张网卡情况如下所示:3、但是此时通过veth0这张网卡去ping veth1,发现不通 ping -原创 2021-08-11 11:47:18 · 1149 阅读 · 5 评论 -
16 如何找到docker中容器网卡外联的veth pair的另一张网卡
1、背景知识比如docker或者kubernetes的calico网络插件,其实都使用到了veth pair设备,即容器里面的网卡是veth pair的一端,宿主机上的某张网卡是veth pair的另一端,那么假如我想知道到底对应的是宿主机上的哪张网卡有什么办法吗?有的,方法好几种,介绍最方便的一种2、步骤:a、进入到容器,执行如下命令:ip link show eth0b、注意这里输出的161: eth0@if162,其中161是eth0接口的index,162是和它成对的veth的index原创 2021-08-11 10:02:41 · 928 阅读 · 0 评论 -
15 Service与Ingress
这种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的 Ingress 服务。所以,Ingress 的功能其实很容易理解:所谓 Ingress,就是 Service 的“Service”。这种本质,其实就是请求先发送到了ingress,然后ingress帮你根据规则进行转发。在实际的使用中,你只需要从社区里选择一个具体的 Ingress Controller,把它部署在 Kubernetes 集群里即可。然后,这个 Ingress Controller 会原创 2021-08-10 13:46:56 · 346 阅读 · 0 评论 -
14 kubernetes如何从外界连通Service
1、方式一: nodePort方式2、方式二:公有云上的 Kubernetes 服务。这时候,你可以指定一个 LoadBalancer 类型的 Service公有云提供的 Kubernetes 服务里,都使用了一个叫作 CloudProvider 的转接层,来跟公有云本身的 API 进行对接。所以,在上述 LoadBalancer 类型的 Service 被提交后,Kubernetes 就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP 地址配置给原创 2021-08-10 13:39:47 · 213 阅读 · 0 评论 -
13 kubernetes中Service 与 DNS 的关系
查看当前集群中的service那么此时其他容器要访问这个service,就可以通过这个DNS来访问:portalms-server-svc.wisecloud.svc.cluster.local这其实就是一个coreDNS服务做到的,那么总得有个映射吧,这个映射在哪呢?通过查看coreDNS的服务,发现对应的deployment这里进行了一个挂载发现这里是通过configMap的方式挂载的,那么就需要查看一下这个configMapkubectl get configMap -n kube-s原创 2021-08-10 11:42:25 · 218 阅读 · 0 评论 -
12 kubernetes中service的实现原理
1、说明Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的,另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求2、service原理一之“kube-proxy组件+iptables规则”kube-proxy 通过 iptables 处理 Service 的过程,其实需要在宿主机上设置相当多的 iptables 规则。而且,kube-proxy 还需要在控制循环里不断地刷新这些规则来确保它们始终是正确的。不难想到,当你的宿主机上有大量 Pod 的时候,原创 2021-08-10 11:08:36 · 313 阅读 · 0 评论 -
11理解kubernetes的calico网络插件
1、Flannerl的host-gw模式:假设现在node1上的容器Infra-container-1要访问node2上的Infra-container-2,其中节点1的网段是10.168.0.2/24,节点2的网段是10.168.0.3/24,这也就意味着节点之间是可以通过eth0网卡进行通信的。且节点1的cni0的网段是10.244.0.1/24,节点2的cni0的网段是10.244.1.1/24。此时会在宿主机上创建这些路由规则:(比如节点1)这意味着目标地址是10.244.1.0/24这个原创 2021-08-10 10:31:11 · 267 阅读 · 0 评论 -
10 docker容器网络原理
1、什么是网络栈网络栈包括了网卡、回环设备、路由表和iptables规则2、容器声明直接使用宿主机的网络栈使用如下命令来启动一个容器,声明使用宿主机的网络栈docker run -d --net=host --name nginx-host nginx容器启动后如下所示:查看一下宿主机上的80端口,发现80端口已经被占用了,而刚才在启动nginx之前该端口是没有被占用的。访问一下该服务,确实能访问通。此时说明了,容器是可以直接使用宿主机的网络的。2、容器如何拥有自己的网络栈网桥(b原创 2021-08-09 10:18:15 · 193 阅读 · 0 评论 -
9 如何将网元服务制作成一个chart并上传到私有仓库
1、首先先给出一个chart模板吧csdn不支持文件上传,自动去获取吧:文档:3 portalms的chart模板.note链接:http://note.youdao.com/noteshare?id=6bdec69d7ea7006a16b89ba18ccefc4a&sub=1C59F7DBE76843BC8AE58B73EB2CDFF22、接下来说一下这个chart里面的主要功能Chart.yaml文件里面的内容没有什么好说的,配置信息而已。values.yaml文件里面需要特别注意原创 2021-08-06 17:12:22 · 218 阅读 · 0 评论 -
kubernetes+rancher+docker+helm+harbor搭建云平台服务思路小结
1 架构介绍一下架构中的每个组件的作用吧1、Jenkins自动化工具2、gitlab存储代码3、docker镜像:相当于一个携带了运行环境的安装包容器:运行启动的镜像,就是一个容器4、harbor私有的镜像仓库,用来存储镜像。docker仓库的企业版(https://hub.docker.com/)5、k8s集群容器,就是进程;容器镜像“.exe”安装包。Kubernetes 就是操作系统!所以k8s集群可以简单理解为多个操作系统,就是用来运行容器的!只是k8s额外提供了很多其他原创 2021-08-06 16:57:35 · 910 阅读 · 0 评论 -
8 pod的调度
1、先回顾一下我当前k8s集群里面的所有资源:kubectl get all --all-namespaces2、为什么需要调度功能?很好理解,假如我线上有一个集群,其中一台机器的CPU和内存特别高,而另一台的性能很差,而如果只是简单的创建一个pod的话,显然这个pod是会根据一个算法随机调度到一个主机上的,但是我这个服务是一个特别耗cpu和内存的服务,我自然希望他调度到一台好点的机器上去。那么就需要定向调度了。通过noeName字段来定向调度:apiVersion: v1kind: Pod原创 2021-08-05 18:41:30 · 185 阅读 · 0 评论 -
7 实战云平台开发人员的流程-如何制作一个chart
1、如云平台整体架构图所示,下面这里是开发人员的流程图。接下来就来搭建一下环境。2、首先gitlab、harbor的搭建,这里就忽略掉了3、原创 2021-08-05 16:25:42 · 549 阅读 · 2 评论 -
6 pod的生命周期
1、流程图如下所示:2、初始化容器apiVersion: v1kind: Podmetadata: name: pod-initcontainer namespace: testspec: containers: - name: main-container image: nginx:1.17.1 ports: - name: nginx-port containerPort: 80 initContainers: - name:原创 2021-08-05 14:06:34 · 86 阅读 · 0 评论 -
5 理解k8s中的pod
1 熟悉pod的配置字段一个完整的Pod的资源清单肯定是很多的,但是我显然是记不住的,那么编写yaml文件的时候如果忘记了怎么办呢?使用如下命令:kubectl explain pod这样就能看到FIELDS里面所有可以编写的字段了,如果又不知道metadata里面的字段不清楚,那么继续使用这种格式去追踪即可:kubectl explain pod.metadata2 熟悉pod的配置1、先创建一个pod-base.yaml文件,内容如下所示:apiVersion: v1kind: Po原创 2021-08-05 11:07:49 · 1488 阅读 · 0 评论 -
4 分析yaml文件
1 创建命名空间首先查看一下当前的所有命名空间:kubectl get namespace使用yaml文件的方式生成一个名为test的命令空间,创建namespace-test.yaml文件,内容为:apiVersion: v1kind: Namespacemetadata: name: test执行如下命令kubectl apply -f namespace-test.yaml,创建这个namespace再次查看namespace,就发现已经创建好了2 创建podapiVe原创 2021-08-04 17:57:24 · 266 阅读 · 0 评论 -
3 k8s创建一个nginx试试
1 安装一个nginx服务试试1、因为我使用的是集群的default这个默认命名空间,所以先执行如下命令查看当前集群里面的所有资源:kubectl get all -n default -o wide发现这里已经有了一个service的资源,这个资源是干嘛的?执行如下命令:kubectl describe service kubernetes发现是代理到了163的6443端口,而6443端口发现是kube-apiserver这个服务的端口。猜测启动这个服务的目的是为了让其他资源能通过dns原创 2021-08-04 17:27:36 · 374 阅读 · 0 评论 -
2 kubernetes集群搭建与集群服务分析
1 环境说明1、内网两台服务器,192.168.1.163和192.168.1.166,计划将163作为集群的master节点,166作为集群的从节点2、两台服务器是centos 7, linux内核是3.10以上的。内存4G,cpu两核,这个是必要条件2 安装步骤1、在163服务器上执行:hostnamectl set-hostname k8s-master01 && bash2、在166服务器上执行:hostnamectl set-hostname k8s-node01 &原创 2021-08-04 16:48:55 · 344 阅读 · 0 评论 -
1 云平台流程图
1 流程图2 组件介绍2.1 jenkins内网环境地址:http://192.168.1.100:8080/作用:自动化2.2 gitlab内网环境地址:http://192.168.1.6:8000/作用:存储代码2.3 docker镜像:相当于一个携带了运行环境的安装包容器:运行启动的镜像,就是一个容器举例nginx说明:1、登录到192.168.1.135服务器上2、执行如下命令查看nginx镜像是否存在: docker images |grep nginx原创 2021-08-04 11:26:07 · 1541 阅读 · 0 评论 -
7 Kubernetes容器网络
1、容器网络linux容器能看见的网络栈,实际上被隔离在它自己的network namespace中。网络栈包含了网卡、回环设备、路由表和iptables规则。作为一个容器,可以声明直接使用宿主机的网络栈。即:但是,在大多数情况下,我们希望容器进程使用自己network namespace的网络栈。拥有自己的Ip地址和端口那么,这个被隔离的容器进程,如何和其他的network namespace里的容器进程进行交互呢?2、docker容器通信的原理linux中,能够起到虚拟交换机作用的网络设备,原创 2021-07-25 19:03:40 · 261 阅读 · 0 评论 -
5 Kubernetes容器持久化存储
1、PV是什么PV描述的,是持久化存储数据卷,定义的是一个持久化存储在宿主机上的目录,比如NFS的挂载目录通常情况下,PV对象是运维人员实现创建在k8s集群里待用的。如下所示2、PVCPVC描述的,则是pod所希望使用的持久化存储的属性,常由开发人员创建3、PV和PVC存在的问题比如创建pod的时候,系统里并没有合适的pv和定义的pvc,那么意味着容器想要使用的volumn不存在,那么此时pod启动就会报错。而这个时候只能运维人员去配置。而为了解决这个问题,增加了一个volumn Contro原创 2021-07-25 17:54:41 · 115 阅读 · 0 评论 -
4 容器编排与Kubernetes作业管理
1、为什么需要Pod容器,就是未来云计算系统中的进程,容器镜像就是这个系统中的.exe安装包,k8s就是操作系统在真正的操作系统中,进程是以进程组的方式存在的,k8s就是将进程组的概念映射到了容器技术中如果没有组的概念,这样的运维关系会非常难以处理pod是k8s里的原子调度单位,k8s的调度器,是统一按照pod而非容器的资源需求进行计算的pod的实现原理:pod只是一个逻辑概念,pod是一组共享了某些资源的容器,pod里的所有容器,共享的是同一个network namespace,并且可以声明共原创 2021-07-25 17:36:29 · 212 阅读 · 0 评论 -
3 k8s集群实践
1、k8s集群搭建网上方式很多,不介绍,基本步骤如下:在所有节点上安装docker和kubeadm部署k8s master部署容器网络插件部署k8s worker部署dashboard可视化插件部署容器存储插件2、k8s中的重要概念开发者第一步,是要制作容器的镜像提交镜像编写k8s的编配配置文件yaml文件通过yaml文件启动在deployment中声明volume3、k8s的几个常用命令以及含义通过配置文件创建或更新服务: kubectl apply -f 配置文原创 2021-07-25 16:21:30 · 102 阅读 · 0 评论 -
2 容器技术概念入门篇
1、到底什么是容器容器其实是一种沙盒技术,能够像一个集装箱一样,把你的应用装起来的技术,这样应用与应用之间,就因为有了便捷而不至于互相干扰。2、容器是怎么实现的容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个边界。对于docker来说,cgroups技术是用来制造约束的主要手段,而namespace技术则是用来修改进程视图的主要方法3、linux的namespace机制linux系统中创建线程的系统调用时clone(),而这里面可以指定参数CLONE_NEWPID参数原创 2021-07-25 16:06:16 · 198 阅读 · 2 评论 -
1 容器技术的背景
1、背景从过去以物理机和虚拟机为主体的开发运维环境,向以容器为核心的基础设施的转变过程,并不是一次温和的改革,而是涵盖了对网络、存储、调度、操作系统、分布式原理等各方面的容器化理解和改造。2、什么是paasplatform as a service,指的是平台即服务3、为什么docker可以脱颖而出docker项目给paas世界带来的降维打击,其实是提供了中非常便利的打包机制,这种机制直接打包了应用运行所需要的的整个操作系统,从而保证了本地环境和云端环境的高度一致,避免用户通过试错来匹配不同运行环原创 2021-07-25 14:42:35 · 420 阅读 · 0 评论