实战kubenetes
简单教学, 配合实操, 搞定kubenetes!
静谧之心
专业摩的佬
业余吉他手
退役喷子
展开
-
谈谈 SRE 和 DevOps 的区别
SRE 全称 Site Reliability Engineering.DevOps 全称 Development and OperationsDevOps是开发拥抱运维,开发人员需要学习运维的相关知识能够承担运维的工作. 本质偏向开发Googel的SRE是运维侧发起的,运维去拥抱开发,运维的人员需要具备一定的开发能力. 本质偏向运维...原创 2022-06-21 15:41:49 · 459 阅读 · 0 评论 -
深入理解 go协程 调度机制
Go 启动的时候,会有一个守护线程 G0,计数,会记录每个 Processor 运行完成的协程的数量,如果发现某一个 Processor 在一段时间内没有发生变化(阻塞),就会往这个协程的任务栈里面插入一个特殊的标记,当协程运行遇到非内联函数,就会读到这个标记,将自己中断下来,插到等待协程队列的队尾,切换到其他队列的队尾。内核线程是由CPU直接调度,如果一个用户线程对应一个内核线程,调度效率来看肯定是快于多个用户线程对应一个内核线程的。当协程被中断的时候,它在寄存器中的运行状态,也会保存在协程对象中;原创 2023-08-14 14:08:58 · 529 阅读 · 0 评论 -
每期一个小窍门: 玩转go mod 命令
这个工具类的 package name = util666。这个工具类的 物理路径是 = test666/util。可以使用下面两个命令来确保依赖正常加载。挎包调用需要大写 方法/变量 首字母。test666 是自身的mod名称。当然 你也可以使用别名来调用。main中引用了 一个工具类。原创 2023-08-13 21:58:35 · 197 阅读 · 2 评论 -
Istio 架构的演进,为什么会有 istiod ?
尽管之前一直被人抱怨存在各种问题,但 Istio 社区的开发脚步没有停歇,我们看到了一次又一次的版本发布从未间断,伴随着各种大大小小的功能更新和优化。就网易杭研而言,轻舟微服务将 Istio 引入生产环境也是极为审慎,事实上也曾遇到了运维和开发的困惑,而 istiod 架构设计的回归让我们彻底松了一口气,拥抱 Istio 实现服务网格的思路更加坚定。原创 2022-10-10 11:33:06 · 1895 阅读 · 0 评论 -
通过生产环境流量录制/线下回放 配合基于云原生的灰度发布 实现保质保量的持续集成
流量回放/复制, 从测试的角度, 本质是:通过把线上的真实流量复制到线下环境,解决测试环境模拟不够真实,或覆盖不够全面的问题。原创 2022-08-15 10:04:57 · 738 阅读 · 1 评论 -
每期一个小窍门: k8s容器亲和性的小例子
很多情况下 我们希望某些pod 禁止运行到一些worker节点上, 可以利用容器亲和性来实现例如下面 设置此pod调度在非ip为10.0.40.3的节点上, 而其他节点都可以 spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressio原创 2022-05-27 15:55:24 · 504 阅读 · 3 评论 -
Docker 反向导出 DockerFile
最近发现个有意思的东西 可以让docker可以反向导出dockerfile在 Docker 的日常运维过程中,可能会构建很多不同的镜像。维护一些基础 Docker 镜像,有些时候没有保存 Dockerfile,但是想查看一些公开仓库的 Docker 镜像是怎么构建的,或因为长时间不维护找不到当时构建镜像的 Dockerfile,或者因为网络无法查看时,就非常希望能从镜像导出 Dockerfile,这时可以试试whaler 命令先设置别名:alias whaler="docker run -t --rm原创 2021-12-09 15:46:36 · 1830 阅读 · 2 评论 -
深入理解k8s operator 机制
Kubernetes 提供了一种扩展机制,允许我们定义自己的资源类型,称为自定义资源。在集群上运行一个 pod 来监控某种类型的自定义资源并基于它管理其他资源,这就是 Operator模式。原创 2021-12-07 16:33:43 · 4954 阅读 · 0 评论 -
k8s 部署高可用mysql 主从集群
主从的cm主从的svc , statefulset都被我合并到一个文件里了,应该是可以用的注意修改storageclass的名称注意apply的时候 -n 指定ns#application/mysql/mysql-configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: mysql labels: app: mysqldata: master.cnf: | # Apply this config on原创 2021-12-02 14:05:27 · 1647 阅读 · 4 评论 -
k8s 改变默认 StorageClass
列出你的集群中的 StorageClasses:kubectl get storageclass输出类似这样:NAME PROVISIONER AGEstandard (default) kubernetes.io/gce-pd 1dgold kubernetes.io/gce-pd 1d默认 StorageClass 以 (default) 标记。标记默认 StorageCla原创 2021-11-24 16:25:24 · 2601 阅读 · 1 评论 -
k8s亲测最好用的可视化 Kuboard 部署教程
直接干货吧这个kuboard对比原装的dashboard, 多了些资源的可视化编辑, 很像阿里云,阿里云, dashboard, kuboard, 都可以可视化快速exec pod 但是华为云不能这里做一个可视化好用程度的排序吧(仅供娱乐)阿里云 > kuboard > dashboard >= 华为云安装 kuboard(确保已经安装好了 metric-server )wget https://kuboard.cn/install-script/kuboard.yaml所原创 2021-10-28 14:16:47 · 5411 阅读 · 1 评论 -
通过地址重写, 解决ingress在使用非标准端口(80, 443)时, 引起的重定向丢失端口问题
最近在搭建私有云k8s集群时, 由于一些安全原因, 没有使用标准端口(80, 443), 发现已部署在pod中的项目出现了重定向丢失端口的问题, 经过排查, 发现本质上不是丢失了端口, 而是默认重定向到了标准端口, http的重定向会默认到80, https会重定向到443端口, 下面我分享一下自己的解决方案方案:简单来说, 要实现ingress在非标准端口正常工作, 要保证以下几个结果, 这里我们以30052代替80, 30054代替443ingress-controller 的pod 需要工作在指原创 2021-10-28 13:39:36 · 2808 阅读 · 1 评论 -
想变得更强吗? 5分钟带你了解云原生核心 -- Istio (上)
a原创 2021-10-11 16:22:49 · 898 阅读 · 1 评论 -
nginx配置静态资源缓存, 同时配合k8s的SVC(core dns)实现负载均衡
最近发现以上线的tomcat web服务静态资源加载比较慢, 而且每次都会重新从服务端拉取, 这里肯定是有缺陷并且需要改进的. 然后决定使用nginx解决, 通过配置静态资源缓存实现动静分离, 同时发现k8s的dns解析果然简单粗暴, 非常实用, 直接无侵入式的实现了nginx的负载均衡(通过在server块的地址里直接配置SVC), 搞定!后面我也会单独写一篇k8s的coredns/kubedns的工作原理, 和大家一起探讨.下面是详细的配置文件Nginx.conf# 静态资源加速, 动静分离原创 2021-06-17 14:17:03 · 1717 阅读 · 2 评论 -
使用Jenkins实现重构项目并部署项目到阿里k8s环境运行
第一步比如我有一个项目A, 并且jenkins里配置的构建分支名称为 --> branchA所以在构建前, 需要将最新的master分支merge到branchA分支, 保证gctest拥有全部最新的代码变更.第二步以这个A项目为例,进入到Jenkins主页面点击我们的namespace 这个是我们的safefood集群的的namespase点击A项目进入到A项目管理页面后, 点击BuildNow下方会有个类似的进度条, 表示该系统正在构建, 可以点击进去, 查看详细构建lo原创 2021-06-09 18:10:56 · 711 阅读 · 0 评论 -
独家首发! java助力mycat实现动态添加数据源, 实现SaaS新增租户秒登独立数据库
这里先简单介绍一下背景, 防止看官迷糊首先手上有一个项目要实现分库, 技术选型为mycatA(运维系统), B(SaaS系统)目标效果(时间顺序 -> 1 -> 2 -> 3 -> 4):管理员在A系统新增租户时新建并初始化新租户的数据库java程序自动在mycat的配置中添加新增租户的配置向mycat发送reload命令, 失败自动触发重试机制.新租户直接在B系统登录成功.由于我怀疑File这个类的在mac和linux的native方法有略微区别, 导致原创 2021-06-03 18:09:54 · 4860 阅读 · 0 评论 -
已经用k8s来部署运维各个微服务的组件,是否可以不用整套微服务?
https://www.zhihu.com/question/430048535/answer/1582533126可以,但要看情况。以主流的SpringCloud为例,其提供的能力与Kubernetes既有重合也有互补,我们举几个例子逐一分析微服务各个核心组件。微服务网关网关几乎不涉及业务部分,各种实现也非常多,选哪个看业务契合度了。但Spring Cloud Gateway不能作为Kubernetes Ingress Controller,如果用不兼容Ingress的框架作为网关层,可能会损失一原创 2021-05-06 13:37:36 · 30401 阅读 · 14 评论 -
k8s 一图看懂StorageClass pv pvc关系
集群管理员预先创建存储类(StorageClass);用户创建使用存储类的持久化存储声明(PVC:PersistentVolumeClaim);存储持久化声明通知系统,它需要一个持久化存储(PV: PersistentVolume);系统读取存储类的信息;系统基于存储类的信息,在后台自动创建PVC需要的PV;用户创建一个使用PVC的Pod;Pod中的应用通过PVC进行数据的持久化;而PVC使用PV进行数据的最终持久化处理。...原创 2021-04-09 11:30:34 · 2230 阅读 · 1 评论 -
k8s服务发现 headless svc和 普通svc 区别
首先我们把 svc 本身看做为首, svc的endpoints对应的pods看作是尾普通 svc我们可以看作是有头svc, 表示svc本身也有一个地址(cluster ip), dns查询时只会返回Service的地址, 具体client访问的是哪个Real Server,是由iptables来决定的headless svcheadless 无头, 无头表示这个svc的负载均衡是没有clusterip的, dns查询会如实的返回2个真实的endpointheadless优点第一种:自原创 2021-04-07 17:42:55 · 3264 阅读 · 2 评论 -
k8s port nodeport targetport containerport 区别
portpod 暴露出来的端口 相对于k8s内部的ipnodeportpod 上层svc对外暴露出的端口, 相对与外部物理机targetportport内部对接容器的端口, targetPort是pod上的端口,从port/nodePort上来的数据,经过kube-proxy流入到后端pod的targetPort上,最后进入容器。containerport镜像暴露的地址, 在pod内部的docker(容器实现)暴露的端口...原创 2021-04-02 12:03:42 · 812 阅读 · 1 评论 -
kubernetes安装Jenkins 挂载NAS 并汉化
首先我们要建立一个namespacekubectl create namespace kube-opspvc pv关于pv 我用的是阿里的k8s nas 所以点点点就好, 这里提供了yml创建方式, 一样的, 注意pvc的名字要和deployment声明的一致apiVersion: v1kind: PersistentVolumemetadata: name: opspvspec: capacity: storage: 20Gi accessModes: - Read原创 2021-04-02 11:10:20 · 1051 阅读 · 1 评论 -
k8s dashboard token过期时间太短的解决方案
点击红框位置, 编辑yaml配置文件args这里增加一行 - '--token-ttl=43200'原创 2021-03-30 16:13:31 · 3649 阅读 · 3 评论 -
K8s 安装可视化dashboard, 并授权登录,(附跳过chrome https证书验证)
不多说, 直接apply 下面文件kubectl apply -f dashboard.yaml# Copyright 2017 The Kubernetes Authors.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of t原创 2021-03-30 12:04:28 · 1468 阅读 · 3 评论 -
kubernetes系列之secret 与 configMap
configmap和secret是两种特殊的存储卷,它们不是给pod提供存储空间用的,而是给管理员或者用户提供了从外部向pod内部注入信息的方式.configmap:把配置文件放在配置中心上,然后多个pod读取配置中心的配置文件,不过,configmap中的配置信息都是明文的,所以不安全;secret:功能和configmap一样,只不过配置中心存储的配置文件不是明文的.configmap和secret也是专属于某个名称空间的.# 用命令行创建configmapkubectl create conf原创 2021-03-15 15:59:34 · 601 阅读 · 0 评论 -
Kubernetes系列之存储详解 emptyDir hostPath nfs pv/pvc 动态卷供应
Volume类型volume是kubernetes Pod中多个容器访问的共享目录。volume被定义在pod上,被这个pod的多个容器挂载到相同或不同的路径下。volume的生命周期与pod的生命周期相同,pod内的容器停止和重启时一般不会影响volume中的数据。所以一般volume被用于持久化pod产生的数据。Kubernetes提供了众多的volume类型,包括emptyDir、hostPath、nfs、glusterfs、cephfs、ceph rbd等。具体可以参考官方文档。本篇文章我们简原创 2021-03-14 10:51:54 · 948 阅读 · 0 评论 -
k8s彻底删除指定pod
kubectl删除pod的指令kubectl delete pod <podname> -n <namespace>但是很多情况下, 上面的命令和k8s 的容灾机制冲突了, 也就是说, k8s会误认为这个pod异常挂掉了, 然后立即启动个新的pod, 从而导致了春风吹又生的情况.既然理解了问题根源, 那我们只需要先撤销掉该pod的容灾机制, 比如删除他的deployment机制.查看所有deployment 信息kubectl get deployment -n <原创 2021-03-29 17:00:24 · 6813 阅读 · 0 评论 -
短小精悍! 2分钟 5步 咔咔搞定kubenetes新版(v1.20+)集群安装
首先得有个集群, 我这里用两个虚拟机演示, 这里就不讨论如何安装虚拟机了, 虚拟机的网络都会安装吧, 相信点进来的大家都会搞定应有环境的.第一步最不起眼, 但是影响最大的一步! 关闭selinux 和 swap, 注意是永久关闭, 如果使用命令关闭的话, 在k8s集群重启的话会导致启动失败, 而且相关报错信息会很有误导性(swap 会有提示, selinux的报错很迷), 防火墙也别忘了开启对应端口, 不懂的同学并且不是生产环境的话, 直接关闭就好.第二步安装docker, 自启动有几台机器就在几原创 2021-03-25 15:25:09 · 7338 阅读 · 2 评论