![](https://img-blog.csdnimg.cn/20200929094725663.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
kubernetes
文章平均质量分 73
从基础知识,到生产环境,步步加深k8s为核心的技能体系架构。
王伯爵
做有趣有价值的事!
展开
-
chrony参数及常用命令介绍
server 192.168.0.206 iburst #选择集群中一个节点作为服务器,这在集群无法连接外网是保证所有节点时间一直,其余所有节点从该节点获取时间同步。server ntp.aliyun.com iburst #外网ntp serverrtcsyncmakestep 1 3 #此出可以设置为:makestep 3 -1 当误差大于三秒时执行步进调整,而不用等待微调allow all #允许所有ip访问本时间服务器。原创 2023-10-27 15:02:58 · 1538 阅读 · 0 评论 -
开发构建一个Helm Chart包
创建一个chart包。将部署服务用到的yaml文件全部放到templates目录中,然后将yaml中可能每次都需要变动的地方修改为变量。将每次都需要变动的地方写到values.yaml中,让模板文件去引用,即可完成部署。手动创建一个chart包部署一个web项目。具体实现步骤: 1.创建一个chart包结构目录。 2.删除template下的所有文件。 3.将之前通过yaml部署的web程序的yaml文件放到template目录中,然后将yaml中经常需要修改的参数用变量替代。原创 2022-11-03 13:44:25 · 1210 阅读 · 0 评论 -
golang error处理之多error聚合
下面这段代码取自于云原生开源项目karmada,我们可以借鉴以下它的检查参数中处理error的方法。// Validate checks Options and return a slice of found errs.func (o *Options) Validate() field.ErrorList { errs := field.ErrorList{} newPath := field.NewPath("Options") skippedResourceConf原创 2022-03-10 09:56:37 · 1611 阅读 · 0 评论 -
5 张图带你搞懂容器网络的工作原理
使用容器总是感觉像使用魔法一样。对于那些理解底层原理的人来说容器很好用,但是对于不理解的人来说就是个噩梦。很幸运的是,我们已经研究容器技术很久了,甚至成功揭秘容器只是隔离并受限的 Linux 进程,运行容器并不需要镜像,以及另一个方面,构建镜像需要运行一些容器。现在是时候解决容器网络问题了。或者更准确地说,单主机容器网络问题。本文会回答这些问题: 如何虚拟化网络资源,让容器认为自己拥有独占网络? 如何让容器们和平共处,之间不会互相干扰,并且能够互相通信? 从容器内部如何访问外部转载 2022-01-24 09:16:55 · 238 阅读 · 0 评论 -
在 Kubernetes 中配置 Container Capabilities
我们在使用 Kubernetes 过程中,偶尔会遇到如下所示的一段配置:securityContext: capabilities: drop: - ALL add: - NET_BIND_SERVICE实际上这是配置对应的容器的Capabilities,在我们使用docker run的时候可以通过--cap-add和--cap-drop命令来给容器添加Linux Capabilities。对于大部分同学可能又要疑问Linux Capabili...转载 2022-01-12 15:58:31 · 1343 阅读 · 0 评论 -
常用的清理 Kubernetes 集群资源命令
长时间运行的集群,常会面临各种资源耗尽的问题,另外磁盘不足时 Kubelet 还会主动清理镜像增加不确定因素,本文提供了一些命令片段用于清理工作。1. Kubernetes 基础对象清理 清理 Evicted 状态的 Pod kubectlgetpods--all-namespaces-owide|grepEvicted|awk'{print$1,$2}'|xargs-L1kubectldeletepod-n 清理 Error 状态的 Pod...转载 2021-12-28 09:13:08 · 275 阅读 · 0 评论 -
一次搞明白 K8s Kubelet 垃圾回收机制
来源:https://sataqiu.github.ioKubelet 垃圾回收(Garbage Collection)是一个非常有用的功能,它负责自动清理节点上的无用镜像和容器。Kubelet 每隔 1 分钟进行一次容器清理,每隔 5 分钟进行一次镜像清理(截止到 v1.15 版本,垃圾回收间隔时间还都是在源码中固化的,不可自定义配置)。如果节点上已经运行了 Kubelet,不建议再额外运行其它的垃圾回收工具,因为这些工具可能错误地清理掉 Kubelet 认为本应保留的镜像或容器,从而可能造成不可预知转载 2021-11-12 11:20:07 · 887 阅读 · 0 评论 -
使用code-generator创建crd controller
code-generator用于生成k8s风格的api代码生成器client-gen conversion-gen deepcopy-gen defaulter-gen go-to-protobuf import-boss informer-gen lister-gen openapi-gen register-gen set-genclient-gen在pkg/apis/${GROUP}/${VERSION}/types.go中使用,使用// +genclient标记转载 2021-11-05 15:25:30 · 425 阅读 · 0 评论 -
Kubernetes学习(关于CoreDNS的5s超时问题)
今天同事反映了一个很奇怪的问题: 在k8s环境里的容器中curl另一个服务时会出现断断续续的超时, 问题现象很简单, 但问题根源很复杂环境说明 12345678910 Kubernetes-1.15.1serviceA: 10.244.3.45servieB: ClusterIP: 10.105.224.130CoreDNS-1.3.1: ClusterIP: 10.96.0.10 instanceA: 10.244.3.43转载 2021-11-04 09:21:15 · 2820 阅读 · 0 评论 -
如何发现 Kubernetes 中服务和工作负载的异常
引言大家好,我是来自阿里云的李煌东,今天由我为大家分享Kubernetes监控公开课的第二节内容:如何发现Kubernetes中服务和工作负载的异常。本次分享由三个部分组成:一、Kubernetes 异常定位存在痛点;二、针对这些痛点,Kubernetes 监控如何更快、更准、更全的发现异常;三、网络性能监控、中间件监控等典型案例解析。1Kubernetes 异常定位存在痛点当下的互联网架构中,越来越多的公司采用微服务+ Kubernetes 这样的架构,这样...转载 2021-10-20 09:27:39 · 205 阅读 · 0 评论 -
kubectl 高效使用技巧
在学习如何更高效地使用 kubectl 之前,你应该对它是如何工作的有个基本的了解。kubectl 是 Kubernetes 集群的控制工具,它可以让你执行所有可能的 Kubernetes 操作。从技术角度上看,kubectl 是 Kubernetes API 的客户端,Kubernetes API 是一个 HTTP REST API,这个 API 是真正的 Kubernetes 用户界面,Kubernetes完全受这个 API 控制,这意味着每个 Kubernetes 操作都作为 API 端点暴露,.转载 2021-10-20 09:24:22 · 1338 阅读 · 0 评论 -
使用 Velero 备份还原 Kubernetes 集群
Velero(https://velero.io)(可以提供备份和还原 Kubernetes 集群资源和持久卷的能力,你可以在公有云或本地搭建的私有云环境安装 Velero,可以为你提供以下能力: 备份集群数据,并在集群故障的情况下进行还原 将集群资源迁移到其他集群 将生产集群复制到开发和测试集群 Velero 包含一个在集群上运行的服务器端和在本地运行的命令行客户端。k8s技术圈专注容器、专注 kubernetes 技术......239篇原创内容公众..转载 2021-09-18 09:22:47 · 333 阅读 · 0 评论 -
几张图解释明白 Kubernetes Ingress
Kubernetes Ingress 只是 Kubernetes 中的一个普通资源对象,需要一个对应的 Ingress 控制器来解析 Ingress 的规则,暴露服务到外部,比如ingress-nginx,本质上来说它只是一个 Nginx Pod,然后将请求重定向到其他内部(ClusterIP)服务去,这个 Pod 本身也是通过 Kubernetes 服务暴露出去,最常见的方式是通过 LoadBalancer 来实现的。同样本文我们希望用一个简单清晰的概述,让你来了解 Kubernetes Ingress.转载 2021-09-18 09:21:27 · 541 阅读 · 0 评论 -
kubernetes的windows节点的坑
部署pod到windows节点时候,如果yaml文件中存在hostPort,则在打容器镜像时候,应该使用EXPOSE在Dockfile中显式的指定要暴露的端口.这样windows节点上的docker才会为其分配对应的hostPort.原创 2021-09-13 15:32:16 · 171 阅读 · 0 评论 -
win节点pod无法连接到apiserver的svc
win节点pod无法连接到apiserver的svc1. 错误现象 pod无法连接api-server 转存失败重新上传取消 flannel 日志有问题无法连接 2. 问题原因及解决方法 问题原因 win节点中有两个网卡,kubelet在往etcd写nodeIP的时候选择的不是flannel的那张网卡,选择的那张网卡不是k8s的业务网卡,kube-proxy做地址伪装的时候就也给了一个错的地址。 解决方法 重启kubelet 设定那个nod原创 2021-09-03 18:27:20 · 457 阅读 · 0 评论 -
windows节点启动pod出错
错误现象[centos@master ~]$ kubectl logs beyondlet-kbwzv -n kube-systemfailed to try resolving symlinks in path "\\var\\log\\pods\\kube-system_beyondlet-kbwzv_812c660a-2284-4f44-8c8b-c27960cd3cfc\\beyondlet\\19.log": CreateFile \var\log\pods\kube-system_bey原创 2021-09-03 17:40:39 · 1376 阅读 · 0 评论 -
Kubernetes Ingress(和网络)的Why以及How
客座文章最初由 Saaras 团队在Saaras 博客[1]上发表在公有云或私有云上无法访问 Kubernetes 中运行的服务。这就是 Kubernetes 在设计时考虑到服务安全性的方式。集群外要安全地访问服务需要了解网络的设置方式以及驱动网络选择的不同需求。我们首先简要地探讨 kubernetes 集群在服务隔离、服务扩展和服务交付方面的期望。一旦提出了高层次的需求,就更容易理解不同构造和抽象的重要性。通过对比使用 Ingress 在 Kubernetes 内部运行的服务之前运行转载 2021-09-01 10:35:31 · 163 阅读 · 0 评论 -
kubernetes内运行curl
kubectl run curl-test --image=radial/busyboxplus:curl -i --tty --rm原创 2021-08-26 17:07:03 · 491 阅读 · 0 评论 -
一文搞懂 4 种常用的 Kubernetes 容器
截止目前 Kubernetes 1.18,Kubernetes 已经支持标准容器,Sidecar 容器,Init 容器,Ephemeral 容器 4 种类型的 Containers。本文我们详细介绍一下这 4 种容器的特性以及使用场景。1标准容器和 Sidecar 容器在 Kubernetes 1.18 之前,这两种容器从 Kubernetes 管理的角度来看,并没有什么区别。只不过人为从功能上做了区分。使用 Sidecar 容器(模块化)具有的优点 加速应用程序开发...转载 2021-08-04 09:25:32 · 828 阅读 · 1 评论 -
通过备份 Etcd 来完美恢复 Kubernetes 中的误删数据
误删或者机器宕机,会导致 Etcd 数据的丢失或某个节点的 Etcd 数据异常时,请不要慌,认真看完此文,绝对有收获。当误删时,如何恢复数据,这个操作需求在实际环境当中是不可避免的。以下描述删除两个 namespace 下的 Pod,如何恢复对应 namespace 的数据。操作环境信息 3 个(master、etcd)+1 个 node 新建 1 个 namespace 下且创建 Pod 和 default namespace 下创建 Pod 前提条件误删除的数据已在 Et..转载 2021-07-22 09:21:14 · 675 阅读 · 0 评论 -
Polaris是什么?Kubernetes的开源配置验证工具
Kubernetes 是一个非常强大的软件部署平台。它提供的灵活性级别可以容纳几乎任何用例,不管它有多独特。这就是 Kubernetes 被一半以上的财富 500 强公司采用的原因。根据 Dimensional Research 和 VMware 的一项研究,“State of Kubernetes 2020 Report[1]”,K8s 的使用率从 2018 年的 27%大幅飙升至 2020 年的 48%。但与所有工具一样,在力量和安全之间有一个自然的权衡。有数百万种方法可以配置 Kubernetes转载 2021-07-08 17:51:10 · 1022 阅读 · 0 评论 -
centos搭建k8s集群
centos搭建k8s集群1. 创建虚拟机 使用镜像CentOS-7-x86_64-DVD-2009.iso 设置联网 1. cd /etc/sysconfig/network-scripts 进入该文件夹后,然后再ls一下,查看是否有ifcfg-ens33,有时是ifcfg-eth02. vi ifcfg-ens33 进入VI的一般模式,移动光标到ONBOOT=no3. 按下"i"进入VI的编辑模式,把no删除改为yes4. 修改后按下esc再次进入一般模式,再原创 2021-06-28 10:54:41 · 152 阅读 · 0 评论 -
Kubernetes 资源对象序列化实现
序列化和反序列化在很多项目中都有应用,Kubernetes也不例外。Kubernetes中定义了大量的API对象,为此还单独设计了一个包(https://github.com/kubernetes/api),方便多个模块引用。API对象在不同的模块之间传输(尤其是跨进程)可能会用到序列化与反序列化,不同的场景对于序列化个格式又不同,比如grpc协议用protobuf,用户交互用yaml(因为yaml可读性强),etcd存储用json。Kubernetes反序列化API对象不同于我们常用的json.Unmar转载 2021-06-24 13:44:56 · 609 阅读 · 0 评论 -
k8s的imagePullSecrets如何生成及使用
一、概述公司的docker仓库(harbor),是私有的,需要用户认证之后,才能拉取镜像。二、生成secret登录docker登录到k8s master节点,先登录dockerroot@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345WARNING! Using --password via the CLI is insecure. Use --password-stdin.Error resp.转载 2021-06-23 16:38:59 · 1295 阅读 · 0 评论 -
kubeadm部署K8S并使用containerd做运行时
kubeadm部署K8S并使用containerd做运行时前言去年12月份,当Kubernetes社区宣布1.20版本之后会逐步弃用dockershim,当时也有很多自媒体在宣传Kubernetes弃用Docker。其实,我觉得这是一种误导,也许仅仅是为了蹭热度。dockershim是Kubernetes的一个组件,其作用是为了操作Docker。Docker是在2013年面世的,而Kubernetes是在2016年,所以Docker刚开始并没有想到编排,也不会知道会出现Kubernetes这个庞转载 2021-06-22 15:34:30 · 1394 阅读 · 0 评论 -
如何部署一个生产级别的 Kubernetes 应用
以下文章来源于k8s技术圈,作者阳明本文我们用一个 Wordpress 示例来尽可能将前面的知识点串联起来,我们需要达到的目的是让 Wordpress 应用具有高可用、滚动更新的过程中不能中断服务、数据要持久化不能丢失、当应用负载太高的时候能够自动进行扩容、当然还有 HTTPS 访问等等,这些是我们的应用部署到线上环境基本上要具备的一些能力,接下来我们就来一步一步完成这些需求。原理首先要部署 Wordpress 应用,我们肯定需要知道 Wordpress 是如何运行起来的,Wordpress .转载 2021-06-22 09:28:22 · 485 阅读 · 0 评论 -
如何无侵入观测与诊断Kubernetes
倪朋飞漫谈云原生Pixie 简介Pixie 是 New Relic 开源的 Kubernetes 观测与诊断平台,它基于 eBPF,无需修改应用就可以通过 PxL 脚本对系统和应用进行诊断、观测以及调试。Pixie 未来将捐献给 CNCF,所以你可以放心使用而无需担心源码控制问题。Pixie的主要特性包括: 自动测量(Instrumentation):得益于 Linux 内核的 eBPF,Pixie 自动收集来自各种协议(如HTTP、DNS、gRPC等)、系统指标以及网络层的应用请求,无.转载 2021-06-09 10:37:18 · 501 阅读 · 0 评论 -
源码解析:Kubernetes 创建 Pod 时,背后发生了什么
赵亚楠分布式实验室本文试图回答以下问题:敲下kubectl run nginx --image=nginx --replicas=3命令后,Kubernetes 中发生了哪些事情?要弄清楚这个问题,我们需要: 了解 Kubernetes 几个核心组件的启动过程,它们分别做了哪些事情,以及 从客户端发起请求到 Pod ready 的整个过程。 Kubernetes 组件启动过程首先看几个核心组件的启动过程分别做了哪些事情。kube-apiserver 启动调用栈...转载 2021-06-09 10:35:39 · 352 阅读 · 0 评论 -
Kubernetes的Startup, Liveness, Readiness深入探索
大咖专栏 | 祝祥Kubernetes在增加了云部署的可扩展性、可移植性和可观察性的同时,也增加了故障风险。虽然它带来了一个具有强大功能和选择的生态系统,以及简化了复杂的应用部署,但它也面临着很多的挑战。Kubernetes给我们带来的一个重要特性就是高可用性。Kubernetes中有许多高可用性选项。在本文中,我们将讨论用于应用程序/微服务本身的高可用性选项。Pods是Kubernetes中最小的可部署单元,一旦应用了声明式配置,Pods就会被调度。Kube-schedu...转载 2021-06-04 09:11:02 · 665 阅读 · 0 评论 -
k8s学习笔记之StorageClass+NFS
k8s学习笔记之StorageClass+NFS一、什么是StorageClassKubernetes提供了一套可以自动创建PV的机制,即:Dynamic Provisioning.而这个机制的核心在于:StorageClass这个API对象.StorageClass对象会定义下面两部分内容:1,PV的属性.比如,存储类型,Volume的大小等.2,创建这种PV需要用到的存储插件有了这两个信息之后,Kubernetes就能够根据用户提交的PVC,找到一个对应的StorageClass,之后Ku转载 2021-04-25 17:37:13 · 984 阅读 · 1 评论 -
kubernetes nfs 启动nfs-client-provisioner报错
报错内容如下:Warning FailedMount 21m kubelet MountVolume.SetUp failed for volume "nfs-client-root" : mount failed: exit status 32Mounting command: systemd-runMounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/po...原创 2021-04-25 17:29:24 · 4399 阅读 · 0 评论 -
CentOS 7 系统上搭建NFS服务
1、NFS 服务简介:NFS,英文全称 Network File System,中文名叫做网络文件系统。NFS 服务可以将远程 Linux 系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机可以像访问自身资源一样读写远程 Linux 系统上的共享文件,在一定程度上使我们的工作效率变得更加高效和简介。NFS 服务采用的是 C/S 架构,即由一个客户端程序和服务端程序组成。服务端程序向其他计算机提供对文件系统的访问,其过程称为输出。NFS 客户端程序对共享文件系统进行访问时,把它们从 NFS 服转载 2021-04-25 15:33:19 · 250 阅读 · 0 评论 -
Kubernetes lxcfs
容器实现的基础是NameSpace和Cgroups。NameSpace实现了对容器(进程)的隔离,NameSpace技术实际上修改了应用进程看待整个计算机“视图”,也就是作用域,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容,实现方式类似于将全局变量修改为了局部变量。Cgroup实现了对容器(进程)资源的限制,但是在容器内部依然缺省挂载了宿主机的procfs的/proc目录,其中包含:meminfo,cpuinfo,stat,uptime等资源信息。一些监控工具如 free/top 会转载 2021-04-23 15:33:53 · 305 阅读 · 0 评论 -
protectKernelDefaults如何起作用
protectKernelDefaults如何起作用1. kubelet配置中的一个参数//该结构体位于:kubernetes/staging/src/k8s.io/kubelet/config/v1beta1/types.gotype KubeletConfiguration struct { metav1.TypeMeta `json:",inline"` // protectKernelDefaults, if true, causes the Kubelet to error if ker原创 2021-04-22 10:00:06 · 359 阅读 · 0 评论 -
Kubernetes 安全风险以及 29 个最佳实践
目前 Kubernetes 在容器编排市场中占据了主导地位,与此同时,众多组织在使用 Kubernetes 时或多或少遇到了安全问题。本文深入探讨使用 Kubernetes 时可能遇到的风险和挑战,并给出了对应的安全实践。作者:Ajmal Kohgadai 翻译:Bach(才云)校对:星空下的文仔(才云)、bot(才云)来源:K8sMeetup社区/原文链接目前从各方面来看,Kubernetes 都在容器编排市场中占据了主导地位。近日发布的《Kubernetes 和容器安全状况报告》更是指.转载 2021-04-22 09:16:59 · 316 阅读 · 0 评论 -
kube-apiserver 重启引起的全量对象更新
现象k8s master进行线上升级,notifier利用client-go提供的informer机制注册了EndPoint的Update Handler,当kube-apiserver重启时触发了大量的update事件,触发依赖的第三方服务限流。原因排查在测试环境进行了测试,并且在注册update事件处理函数中调用 reflect.DeepEqual(old, new) 进行了比较,发现返回true,即old与new完全相同却产生了update事件。接下来就是到事件产生的地方去寻找原因,主转载 2021-04-02 09:08:43 · 558 阅读 · 0 评论 -
Kubernetes 中 Pod 资源的正确识别
1、容器资源限制概述在使用docker作为容器引擎的时候,可以通过添加--memory、--cpus及更多参数来限制容器可用的cpu和内存,具体参数可以参考docker 资源限制[1],docker对容器进行限制的原理实际上是利用Linux内核的cgroups实现的,cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石关于cgroups资源限制实现可以参考Docker 背后...转载 2021-03-29 10:51:31 · 571 阅读 · 0 评论 -
Pod 拓扑分布约束
Pod 拓扑分布约束1.环境CentOS Linux release 8.3.2011kubernetes 1.18.16一个master节点,两个node节点2 使用Pod 拓扑分布约束2.1 在api-server和scheduler中开启EvenPodsSpread编辑/etc/kubernetes/manifests/kube-apiserver.yaml#在文件中添加- --feature-gates=EvenPodsSpread=true编辑/etc/ku原创 2021-03-26 14:00:07 · 356 阅读 · 0 评论 -
kubernetes 从docker迁移到Containerd
kubernetes 从docker迁移到Containerd1 背景kubeadm版本:v1.18.16kubernetes 版本:v1.18.16一个master两个worker主机版本:CentOS Linux release 8.3.20112 操作步骤#查看所有节点[root@master ~]# kubectl get nodes -ANAME STATUS ROLES AGE VERSIONmaster Ready mas原创 2021-03-26 13:57:10 · 439 阅读 · 0 评论 -
【图解】Kubernetes Deployment 故障排查指南
如果你不知道从何下手,那么在 Kubernetes 中排查故障可能会是一项艰难的任务。文本以超详细的图解说明了如何对 Kubernetes Deployment 进行故障排查,相信会对你有启发。太长不看版:下面这张图可以帮助你调试 Kubernetes 中的 Deployment。当你想要在 Kubernetes 中部署应用程序时,通常需要定义 3 个组件: Deployment:创建 Pod 副本的方法; Service:内部负载均衡器,将流量路由到 Pod; I转载 2021-03-19 17:52:56 · 1074 阅读 · 0 评论