![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
k8s
zhangshaohuas
这个作者很懒,什么都没留下…
展开
-
Kubernetes 集群的监控方案
对于 Kubernetes 集群本身的监控也是非常重要的,我们需要时时刻刻了解集群的运行状态。对于集群的监控一般我们需要考虑以下几个方面:Kubernetes 节点的监控:比如节点的 cpu、load、disk、memory 等指标内部系统组件的状态:比如 kube-scheduler、kube-controller-manager、kubedns/coredns 等组件的详细运行状态编排级的 metrics:比如 Deployment 的状态、资源请求、调度和 API 延迟等数据指标.Ku原创 2020-09-13 10:06:03 · 554 阅读 · 0 评论 -
traefik TLS认证配置
在现在大部分场景下面我们都会使用 https 来访问我们的服务,这节课我们将使用一个自签名的证书,当然你有在一些正规机构购买的 CA 证书是最好的,这样任何人访问你的服务的时候都是受浏览器信任的证书。一:使用下面的 openssl 命令生成 CA 证书:openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 365 -out tls.crt[root@k8s-master traefik]# ll总用量 16-rw-r--原创 2020-09-07 14:54:25 · 3019 阅读 · 1 评论 -
Ingress controller之 traefik
Traefik 是一款开源的反向代理与负载均衡工具。它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。目前支持 Docker、Swarm、Mesos/Marathon、 Mesos、Kubernetes、Consul、Etcd、Zookeeper、BoltDB、Rest API 等等后端模型。要使用 traefik,我们同样需要部署 traefik 的 Pod,我们将 traefik 部署到master节点上。1:为安全起见我们这里使用 RBAC 安全认证方式:(rbac.yam原创 2020-09-07 09:45:36 · 410 阅读 · 0 评论 -
K8S 之 Service Account+secret
kubernetes集群有两类认证时的账号:user account(管理者、访问者)service account(pod)。顾名思义,主要是给service使用的一个账号。具体一点,就是为了让Pod中的进程、服务能访问k8s集群而提出的一个概念。基于service account,pod中的进程、服务能获取到一个username和令牌Token,从而调用kubernetes集群的api server。kubectl get sa --all-namespacesNAMESPACE原创 2020-08-06 18:43:30 · 2718 阅读 · 0 评论 -
Kubernetes 准入控制 Admission Controller 介绍
1.什么是Admission ControllerAdmission Controller(准入控制)是 Kubernetes API Server 用于拦截请求的一种手段。Admission可以做到对请求的资源对象进行校验,修改。service mesh最近很火的项目Istio天生支持Kubernetes,利用的就是admission对服务实例自动注入sidecar。假如对 Kubernetes 有一定的了解的话,应该会知道在 Kubernetes 中还有 authn/authz,为什么还会引入原创 2020-08-06 16:51:12 · 326 阅读 · 0 评论 -
Nginx-ingress对比Traefik-ingress
https://blog.csdn.net/BigData_Mining/article/details/88529157https://blog.csdn.net/Mr_rsq/article/details/107353395原创 2020-08-01 09:24:02 · 5787 阅读 · 0 评论 -
k8s API Server授权管理
目录授权策略1. ABAC授权模式详解1.1访问策略对象(1)主体属性(2)资源属性(3)非资源属性1.2 ABAC授权算法1.3 使用kubectl时的授权机制1.4 常见的ABAC授权示例1.5 对Service Account进行授权2.Webhook授权模式详解当客户端发起API Server调用时,API Server内部要:先进行用户认证然后执行用户授权流程,即通过授权策略来决定一个API调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权,是权限与安全系统的重要一环。简单原创 2020-07-30 22:00:54 · 1351 阅读 · 0 评论 -
k8s API Server认证管理
Kubernetes集群中所有资源的访问和变更都是通过Kubernetes API Server的REST API来实现的,所以集群安全的关键点就在于如何识别并认证客户端身份(Authentication)以及随后访问权限的(Authorization)Kuernetes 提供3种级别的客户端身份认证方式:HTTPS证书认证:基于CA根证书签名的双向数字证书认证方式HTTP Token认证:通过一个Token来识别合法用户HTTP Base认证:通过用户名+密码的方式验证HTTPS证书认证原理原创 2020-07-30 11:37:47 · 281 阅读 · 0 评论 -
kubernetes 应用包管理工具:Helm
文章目录1.1 Helm介绍1.2 Helm主要概念1.3 Helm V3 与 V2 区别1.4 Helm下载地址:1.5 Helm安装2.1 Helm 添加第三方 Chart 库2.2 列出所有仓库3 Helm 部署应用4 构建 Helm 自定义Chart4.1 快速制作自定义chart4.2 从0制作自定义chart通过之前的学习,我们已经可以部署Pod,Deploymen,Service,Ingress,ConfigMap等kubernetes资源了,对于一个复杂的应用,我们可能需要部署多个资源,才原创 2020-07-29 11:44:12 · 512 阅读 · 0 评论 -
Kubernetes 实战:部署Dashboard
环境:kubeadm安装的集群版本:v1.17.0官方文档:https://github.com/kubernetes/dashboardKubernetes Dashboard 是 Kubernetes 的官方 Web UI。使用 Kubernetes Dashboard,你可以:向 Kubernetes 集群部署容器化应用诊断容器化应用的问题管理集群的资源查看集群上所运行的应用程序创建、修改Kubernetes 上的资源(例如 Deployment、Job、DaemonSet等)展示集原创 2020-07-28 11:07:33 · 675 阅读 · 1 评论 -
kubernetes 实操:tomcat+mysql
环境:[root@k8s-master myweb]# kubectl get nodesNAME STATUS ROLES AGE VERSIONk8s-master Ready master 168d v1.17.0k8s-node1 Ready <none> 168d v1.17.0k8s-node2 Ready <none> 168d v1.17.0需要启动两个容器myw原创 2020-07-27 15:52:46 · 271 阅读 · 0 评论 -
k8s 7层路由机制:Ingress
根据前面对 Service 的使用说明,我们知道 Service 的表现形式为IP:Port,工作在TCP/IP层.对于基于 HTTP 的服务来说,不同的URL地址经常对应到不同的后端服务或者虚拟服务器,这些应用层的转发机制仅通过kubernetes的Service机制是无法实现的。kubernetes V1.1版本中新增Ingress将不同URL的访问请求转发到后端不同的Service,以实现HTTP层的业务路由机制。Ingress由两部分组成:Ingress Controller 和 Ingres原创 2020-07-26 19:44:11 · 1278 阅读 · 0 评论 -
从集群外部访问pod或service
由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问它们。为了让外部客户端可以访问这些服务,可以将Pod或Service的端口号映射到宿主机,以使客户端应用能够通过物理机访问容器应用。将容器应用的端口号映射到物理机设置容器级别的hostPort通过设置容器级别的hostPort,将容器应用的端口号映射到物理机上:[root@k8s-master ~]# vim pod-hostport原创 2020-07-25 17:43:41 · 656 阅读 · 0 评论 -
Headless Services
什么是Headless ServicesHeadless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP。也被称为无头服务。Headless Services使用场景第一种:自主选择权,有时候client想自己决定使用哪个Real Server,可以通过查询DNS来获取Real Server的信息第二种:headless service关联的每个endpoint(也就是Pod),都会有对应的DNS域名;这样Po原创 2020-07-24 09:18:53 · 3744 阅读 · 0 评论 -
k8s service的基本用法
一般来说,对外提供服务的应用程序需要通过某种机制来实现,对于容器应用最简便的方式就是通过TCP/IP机制及监听IP和端口号来实现。例如,定义一个提供Web服务的RC,由两个Tomcat容器副组成,每个容器都通过containerPort设置提供服务的端口号为8080:webapp-rc.yamlapiVersion: v1kind: ReplicationControllermetadata: name: webappspec: replicas: 2 template: m原创 2020-07-23 21:02:57 · 810 阅读 · 1 评论 -
pod调度之StatefulSet
RC、Deployment、DaemonSet都是面向无状态的服务,它们所管理的Pod的IP、Hostname、启停顺序等都是随机的,被管理的Pod重建时,Pod的IP、Hostname都会有变化。而StatefulSet是有状态的集合,管理所有有状态的服务,比如MySQL、MongoDB集群等。StatefulSet本质上是Deployment的一种变体,在v1.9版本中已成为GA版本,它为了解决有状态服务的问题,它所管理的Pod拥有固定的Pod名称、启停顺序。在StatefulSet中,Pod名字原创 2020-07-23 13:22:00 · 1046 阅读 · 0 评论 -
动态存储管理实战: 独立部署GlusterFS
准备 工作为了能够使用GlusterFS,首先在计划用于GlusterFS的各个Node上安装GlusterFS客户端:yum -y install glusterfs glusterfs-fuseGlusterFS 管理服务容器需要以特权模式运行,在kube-apiserver的启动参数中增加:vim /etc/kubernetes/apiserver新增:--allow-privileged=true重启kube-apiserver服务给节点打标签,是为了将GlusterFS容器定向原创 2020-07-22 21:19:30 · 263 阅读 · 0 评论 -
基于prometheus的HPA实战
架构如下:关键组件包括:Prometheus:定期采集各pod的性能指标Custom Metrics Server:自定义Metrics Serverr,用prometheus Adapter进行具体实现。通过Metrics Aggregate将自定义指标API注册到API server中。HPA Controllerkubernetes的HPA控制器。基于用户定义的策略进行自动扩容缩容操作。开始部署:在Master的API Server启动Aggregation层,通过设置k原创 2020-07-20 11:13:58 · 1099 阅读 · 1 评论 -
Init Container(初始化容器)
在很多应用场景中,应用在启动之前都需要进行如下初始化操作:等待其他关联组件正确运行(例如数据库或某个后台服务)基于环境变量或配置模板生成配置文件。从远程数据库获取本地所需配置,或者将自身注册到某个中央数据库中。下载相关依赖包,或者对系统进行一些预配置操作。Kubernetes 1.3引入了一个Alpha版本的新特性init container(初始化容器),用于在启动应用容器(app container)之前启动一个或多个初始化容器,完成应用容器所需的预置条件,如图所示。init cont原创 2020-07-18 22:20:26 · 2725 阅读 · 0 评论 -
pod调度之CrontJob:定时任务
Cron Job 管理基于时间的 Job,即:在给定时间点只运行一次周期性地在给定时间点运行一个 CronJob 对象类似于 crontab (cron table)文件中的一行。它根据指定的预定计划周期性地运行一个 Job。我们需要掌握Cron Job的定时表达式,它基本上照搬了Linux Cron的表达式,区别是第1位是分钟而不是秒,格式如下:Minutes Hours DayofMonth Moth DaYofWeek Year其中每个域都可出现的字符如下:Minutes:可出现“原创 2020-07-18 17:50:12 · 1254 阅读 · 0 评论 -
pod调度之Job:批处理调度
Kubernetes从1.2版本开始支持批处理类型的应用,我们可以通过Kubernetes Job资源对象来定义并启动一个批处理任务。批处理任务通常**并行(或者串行)**启动多个计算进程去处理一批工作项(work item),处理完成后,整个批处理任务结束。按照批处理任务实现方式的不同,批处理任务可以分为以下的几种模式:Job Template Expansion模式:一个Job对象对应一个待处理的Work item,有几个Work item就产生几个独立的Job。通常适合Work item原创 2020-07-18 16:25:34 · 410 阅读 · 0 评论 -
pod调度之DaemonSet
DaemonSet是k8s 1.2版本新增的一种资源对象,用于管理在集群中每个Node上仅运行一份Pod的副本实例。这种用法适合有以下需求的应用:在每个node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程。在每个node上都运行一个日志采集程序,例如Fluentd或者Logstach。在每个node上都运行一个性能监控程序,采集该node的运行性能数据,例如prometheus node exporter、colletcd、new relic agent,或者ganglia原创 2020-07-18 09:07:00 · 477 阅读 · 0 评论 -
Pod Priority Preemption: Pod优先级调度
对于运行各种负载(如Service、Job)的中等规模或者大规模的集群来说,出于各种原因,我们需要尽可能提高集群的资源利用率。而提高资源利用率的常规做法是采用优先级方案。即不同类型的负载对应不同的优先级,同时允许集群中的所有负载所需的资源总量超过集群可提供的资源。在这种情况下,当发生资源不足的情况时,系统可以选择释放一些不重要的负载(优先级最低的),保障最重要的负载能够获取足够的资源稳定运行。Kubernetes 1.8版本引入了基于Pod优先级抢占(Pod Priority Preemption)原创 2020-07-17 21:12:28 · 694 阅读 · 1 评论 -
pod调度之Taints和Tolerations(污点和容忍)
NodeAffinity节点亲和性,是Pod上定义的一种属性,使Pod能够按我们的要求调度到某个Node上。而Taints则恰恰相反,它可以让Node拒绝运行Pod,甚至驱逐Pod。Taints(污点)是Node的一个属性,设置了Taints(污点)后,Kubernetes是不会将Pod调度到这个Node上的。Kubernetes给Pod设置了个属性Tolerations(容忍),只要Pod能够容忍Node上的污点,那么Kubernetes就会忽略Node上的污点,就能够把Pod调度过去。因此 Tai原创 2020-07-17 10:08:34 · 834 阅读 · 0 评论 -
Pod调度之PodAffinity:pod亲和与互斥调度策略
pod间的亲和与互斥调度策略让用户从另一个角度来限制pod所运行的节点:根据在节点上正在运行的pod的标签而不是节点的标签进行判断和调度,要求对节点和pod两个条件进行匹配。下面通过实例来说明pod间的亲和性和互斥性策略设置参照目标pod首先,创建一个名为pod-flag的pod,带有标签security=s1和app=nginx,后面的例子将使用pod-flag作为pod亲和与互斥的目标pod:[root@bogon ~]# vim pod-flag.yaml apiVersion: v原创 2020-07-16 22:19:49 · 5690 阅读 · 0 评论 -
pod调度之NodeAffinity:Node亲和性调度
NodeAffinity意为Node亲和性调度策略。是用于替换NodeSelector的全新调度策略。目前有两种节点节点亲和性表达:RequiredDuringSchedulingIgnoredDuringExecution:必须满足制定的规则才可以调度pode到Node上。相当于硬限制PreferredDuringSchedulingIgnoreDuringExecution:强调优先满足制定规则,调度器会尝试调度pod到Node上,但并不强求,相当于软限制。多个优先级规则还可以设置权重值,以原创 2020-07-16 20:49:23 · 7208 阅读 · 1 评论 -
pod调度之NodeSelector:定向调度
在实际情况下,可能需要将pod调度到指定的一些Node上。我们可以通过Node的标签(Lable)和pod的nodeSelector属性相匹配,来达到上述目的。首先通过kubectl lable命令给目标Node打上一些标签:[root@bogon ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONserver01 Ready <none> 5d12h v1.17.7[root@bog原创 2020-07-16 11:58:39 · 2649 阅读 · 0 评论 -
pod调度之Deployment或RC:全自动调度
在最早的kubernetes版本里只有一个pod副本控制器RC(Replication Controller)RC独立于所控制的pod,并通过Lable标签这个松耦合关联关系控制目标pod实例的创建和销毁。RC的标签选择器只能选择一个标签,于是有了RC的增强版:RS(RepicaSet),RS拥有集合石的标签选择器,可以选择多个pod标签。kubernetes的滚动升级就是运用了RS的这个特性来实现的。通常,我们使用Deployment对象调用RS控制器来自动完成pod副本的部署,版本更新,回滚等操作原创 2020-07-15 21:49:10 · 576 阅读 · 0 评论 -
pod健康检查和服务可用性检查
pod通过两类探针来检查容器的健康状态。分别是LivenessProbe(存活性探测)和ReadinessProbe(就绪型探测)LivenessProbe探针(存活性探测)用于判断容器是否健康(Running状态)并反馈给kubelet。有不少应用程序长时间持续运行后会逐渐转为不可用的状态,并且仅能通过重启操作恢复,kubernetes的容器存活性探测机制可发现诸如此类问题,并依据探测结果结合重启策略触发后的行为。存活性探测是隶属于容器级别的配置,kubelet可基于它判定何时需要重启一个容器。原创 2020-07-13 18:37:48 · 1010 阅读 · 0 评论 -
pod生命周期和重启策略
pod的转态状态值描述挂起(Pending)API Server创建了pod资源对象已存入etcd中,但它尚未被调度完成,或者仍处于从仓库下载镜像的过程中。运行中(Running)Pod已经被调度至某节点,并且所有容器都已经被kubelet创建完成成功(Succeeded)Pod中的所有容器都已经成功终止并且不会被重启失败(Failed)Pod中的所有容器都已终止了,并且至少有一个容器是因为失败终止。即容器以非0状态退出或者被系统禁止。未知(Unknow原创 2020-07-13 14:11:00 · 850 阅读 · 0 评论