
Kubernetes
文章平均质量分 79
kubernets学习心得
牛牛Blog
把学问过于用作装饰是虚假;完全依学问上的规则而断事是书生的怪癖
展开
-
Kubernetes 1.18 Warning ImageGCFailed Error failed to get imageFs info: unable to find data in memor
Kubernetes 1.18 Warning ImageGCFailed Error failed to get imageFs info: unable to find data in memory cache原创 2021-11-30 20:21:51 · 7230 阅读 · 0 评论 -
kube-proxy 切换 proxy mode
kube-proxy切换proxy mode原创 2021-11-30 17:15:08 · 2615 阅读 · 0 评论 -
Kubernetes Nginx Ingress HTTP 通过 301 而不是 308 重定向到 HTTPS?
我们正在 Azure AKS 上运行几个 k8s 集群。该服务(幽灵博客)位于 Nginx 入口后面,并使用 Letsencrypt 的证书进行保护。所有这些工作正常,但重定向行为是我遇到的问题。The Ingress correctly re-directs fromhttp://whatever.comtohttps://whatever.com—the issue is that it does so using a 308 redirect which strips all po...转载 2021-11-16 20:48:55 · 3310 阅读 · 0 评论 -
ingress-nginx 中 Rewrite 的使用
ingress-nginx 中 Rewrite 的使用原创 2021-11-16 20:30:49 · 9854 阅读 · 1 评论 -
一文搞懂容器运行时 Containerd
在学习 Containerd 之前我们有必要对 Docker 的发展历史做一个简单的回顾,因为这里面牵涉到的组件实战是有点多,有很多我们会经常听到,但是不清楚这些组件到底是干什么用的,比如libcontainer、runc、containerd、CRI、OCI等等。Docker从 Docker 1.11 版本开始,Docker 容器运行就不是简单通过 Docker Daemon 来启动了,而是通过集成 containerd、runc 等多个组件来完成的。虽然 Docker Daemon 守护进程..原创 2021-11-15 21:01:01 · 2126 阅读 · 0 评论 -
K8S metrics server 安装
helm安装地址:Release metrics-server-helm-chart-3.6.0 · kubernetes-sigs/metrics-server · GitHubhelm install -f values.yaml metrics-server -n mcd-infra ./报错解决:metrics server cannot validate certificate for because it doesn't contain any IP SANssolve:...原创 2021-11-15 20:42:36 · 1441 阅读 · 0 评论 -
Docker切换Containerd
1.节点disable kubectl cordon node-host-name 2. 操作系统开启cgroupv2 cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 设置必需.原创 2021-11-15 15:42:09 · 1826 阅读 · 0 评论 -
Helm(6)-Chart开发提示和技巧
本指南涵盖了Helm chart的开发人员在构建生产环境质量的chart时学到的一些提示和技巧。了解你的模板功能Helm使用了Go模板将你的自由文件构建成模板。 Go塑造了一些内置方法,我们增加了一些其他的。首先,我们添加了Sprig库中所有的方法,出于安全原因,“env”和“expandenv”除外。我们也添加了两个特殊的模板方法:include和required。include方法允许你引入另一个模板,并将结果传递给其他模板方法。比如,这个模板片段包含了一个叫mytpl的模板,然..原创 2021-11-10 21:16:15 · 1607 阅读 · 0 评论 -
Helm系列(3)- Helm 的基本使用
仓库Helm 的 Repo 仓库和 Docker Registry 比较类似,Chart 库可以用来存储和共享打包 Chart 的位置,我们在安装了 Helm 后,默认的仓库地址是 google 的一个地址,这对于我们不能科学上网的同学就比较苦恼了,没办法访问到官方提供的 Chart 仓库,可以用helm repo list来查看当前的仓库配置:$ helm repo listNAME URLstable https://kubernetes-charts.storage.google原创 2021-11-10 20:00:22 · 3366 阅读 · 0 评论 -
K8s 还是 k3s?This is a question
本文来自:Rancher Labs自k3s问世以来,社区里有许多小伙伴都问过这样的问题“除了中间的数字之外,k3s和K8s的区别在哪里?”,“在两者之间应该如何选择?”。本文将简单介绍它们两者的区别。什么是Kubernetes?正如大家所了解到的那样,Kubernetes是一个“容器编排平台”,也就是说你可以从一组机器中选择其中之一来运行你所需要使用的容器。它也处理诸如升级你的容器之类的事情,所以如果你发布网站的新版本,它会逐渐使用新版本来启动容器,并放弃旧版本,这一过程仅需一到两分钟。原创 2021-11-09 21:20:49 · 1005 阅读 · 0 评论 -
Helm系列(2)- 你不得不了解Helm 3中的5个关键新特性
1、 移除了TillerHelm最终移除了其服务器端组件,Tiller。现在,它完全没有代理。Tiller之前是一个运行在Kubernetes上的小型应用程序,它用于监听Helm命令并处理设置Kubernetes资源的实际工作。这是Helm3中最重大的更改。为什么Tiller的移除备受关注呢?首先,Helm应该是一种在Kubernetes配置上的模板机制。那么,为什么需要在服务器上运行某些代理呢?Tiller本身也存在一些问题,因为它需要集群管理员的ClusterRole才能创建。因此,假设你要转载 2021-11-09 21:10:59 · 898 阅读 · 0 评论 -
Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
将master上对应目录/run/systemd/resolve/resolv.conf文件复制一份到子节点上即可。如还不行,可试下如下方法:1、首先kubectl -n kube-system edit configmap coredns2、然后注释掉loop3、最后kubectl -n kube-system delete pod -l k8s-app=kube-dns...原创 2021-11-09 16:49:26 · 2902 阅读 · 2 评论 -
kubernetes ingress更改日志格式
Ingress Nginx默认访问日志都输出到/var/log/nginx/access.log文件中,但是对于一般的生产环境来说,不可能把所有日志都输到一个日志文件中,一般情况都是根据域名分别输出到各个文件中。所以这里区分http指令域默认配置以及单独域名的日志的配置方式。1.默认日志格式更改为json 修改mandatory.yaml部署文件nginx-configuration ConfigMap配置中log-format-upstream字段,具体修改如下: log-form原创 2021-11-09 15:43:24 · 4497 阅读 · 0 评论 -
Ingress(Nginx)日志持久化与可视化(多图预警)
Ingress(Nginx)日志持久化与可视化(多图预警)Ingress(Nginx)日志持久化与可视化(多图预警) 前言 部署架构 部署步骤 一、ingress持久化步骤 1. 自建kubernetes的ingress持久化 (1) ingress添加PVC用于ingress日志存储 (2) ingress添加挂载 (3) ingress修改日志格式和存储位置 2. 阿里云kubernetes的ingress持久化 (1) 通过阿里云控制台为i原创 2021-11-09 15:33:03 · 4377 阅读 · 0 评论 -
Helm系列(5)-helm 常用命令
安装前自定义 chart上述安装方式只会使用 chart 的默认配置选项。很多时候,我们需要自定义 chart 来指定我们想要的配置。使用helm show values可以查看 chart 中的可配置选项:然后,你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件。$ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml$ helm ins..原创 2021-11-04 20:00:17 · 12079 阅读 · 0 评论 -
Kubernetes Dashboard部署
安装部署Kubernetes Dashboard (补充解决官方出现的一些RBAC CERT等问题)官方文档:https://github.com/kubernetes/dashboard参考文章:https://kuboard.cn/install/install-k8s-dashboard.html#前言Kubernetes Dashboard 是 Kubernetes 的官方 Web UI。使用 Kubernetes Dashboard,你可以: 向 Kubernetes 集群部原创 2021-11-03 18:23:37 · 776 阅读 · 0 评论 -
K8s常见问题:Service 不能访问排查流程
问题1:无法通过 Service 名称访问如果你是访问的Service名称,需要确保CoreDNS服务已经部署:[root@k8s-master ~]# kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-7f89b7bc75-745s41/1Running03d5hcoredns-7f89b7bc75-fgdfm1/1Ru...原创 2021-11-03 17:36:02 · 12948 阅读 · 2 评论 -
K8S 检查 unhealthy Get “http://127.0.0.1:10251/healthz“: connect: connection refused
> k get csNAME STATUS MESSAGE ERRORscheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: c...原创 2021-11-01 16:15:05 · 3544 阅读 · 0 评论 -
如何将单 master 升级为多 master 集群
前面我们课程中的集群是单 master 的集群,对于生产环境风险太大了,非常有必要做一个高可用的集群(https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/ha-topology/),这里的高可用主要是针对控制面板来说的,比如 kube-apiserver、etcd、kube-controller-manager、kube-scheduler 这几个组件,其中 kube-controller-manager 于 ku原创 2021-11-01 15:22:31 · 753 阅读 · 0 评论 -
K8S 故障处理经验积累(容器)
1.k8s集群 某个节点 pod 启动不了,docker报错如下failed to start shim: fork/exec /usr/bin/docker-containerd-shim: resource temporarily unavailable: unknown Failed to create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "mcd-xua.原创 2021-10-18 21:21:23 · 2081 阅读 · 0 评论 -
Kubernetes CRD 系列(八):Controller 的发展变化
0. 概述在第一篇的时候就说过,在 Kubernetes v1.16 版本以及之后,CRD GA 了,这也就意味着 CRD 的版本正式成为了 V1 版本,而不再是 alphiv1 或者 betav1 了。所以这里第一件事情就是回顾一下 CRD 的一路发展历程:Kubernetes 1.6以前:CRD 的前身叫 ThirdPartyResources Kubernetes 1.7:CRD 资源被加入 api-server Kubernetes 1.8 加入了 CustomResourceVa原创 2021-10-13 20:11:30 · 555 阅读 · 0 评论 -
Kubernetes CRD 系列(六):Operator SDK
0. 概述在Kubernetes CRD 系列:Controller中,我尝试用原生的 Code-Genarator 结合一个 Sample Controller 项目,演示了如何开发一个 Controller,但是,从那个指导中可以看出,通过这样的方式来开发 Controller 比较原始,需要做的工作比较多,总结一下有:初始化项目结构(从 Sample Controller 中修改) 定义 CRD 生成代码 初始化 Controller 编写业务逻辑其实从这里的步骤来看,有一些是每..原创 2021-10-12 15:07:11 · 1207 阅读 · 0 评论 -
Kubernetes CRD 系列(五):Controller
概述在学习 Kubernetes 基础知识的时候,应该就很清楚,对于 Kubernetes 的操作,大多数情况下都是通过 YAML 描述文件来声明的,偶尔会通过 kubectl 命令行介入。而 YAML 描述文件,除了核心资源 Pod,Service,Volume 和 Namespace 之外,还有很多 Workload,例如常见的 Deployment / DaemonSet 之类的,那么不知道你是否有关心过这些 Workload 是如何工作的?我曾经也很好奇,所以稍微看了一下 Kubernete原创 2021-10-11 21:47:12 · 663 阅读 · 0 评论 -
Kubernetes CRD 系列(四):ClientSet 和 Informer
概述在上一篇关于 CRD 的 Typed Client 的使用实操中,因为内容相对比较多,所有有一些比较关键的点被一笔带过了,或者我认为不适合放在一起讲,所以就忽略了,所以在这一篇中,我决定补一下漏,对一些我觉得比较重要的概念补充说明一下。clientset在上一篇关于 CRD 的 Typed Client 的使用实操中,我快速得提了一口 clientset,但是,并没有详细地介绍一下什么是 clientset,但是我认为那一句也算是概要得说完了 clientset 的含义:可以以 Typed原创 2021-10-11 21:45:53 · 1396 阅读 · 0 评论 -
Kubernetes CRD 系列(三):Client-Go 的使用
概述在上一篇GVK 和 GVR中,我演示了如何通过 HTTP API 来访问操作 Kubernetes 的资源,如果我们愿意,完全可以用代码来做这些操作,从而将 Kubernetes CRD 的操作集成进我们的项目中。但是,事实上,这种工作繁琐且复杂,所以,不妨先看看是否有现成的工具可以利用。在 Go 编程语言中,官方钦定了两个 Library,分别是Client-Go和Api Machinery,其中 Client-Go 可以用来 CRUD Kubernetes 的资源,而 Api Ma...原创 2021-10-11 21:44:24 · 2972 阅读 · 1 评论 -
Kubernetes CRD 系列(二):Api Server 和 GVK(R)
概述在上一篇中,我介绍了如何创建一个 CRD 以及通过这个 CRD 来创建 CR。这些关于 CR 的操作都是通过 kubectl 命令来完成的,但是,事实上,到目前位置,kubectl 是如何操作这些 CR 的我们还是不清楚。对于后面还有很多内容都是需要代码和 CR 关联的,所以,我觉得在开始一些代码的工作之前,有必要先对 Kubernetes 的 Resource 机制进行一些介绍。在Kubernetes 入门第二篇中,我介绍了 API Server 是用于资源操作的组件,事实上,之前我是说可..原创 2021-10-11 21:43:31 · 1651 阅读 · 0 评论 -
Kubernetes CRD 系列(七):Operator
0. 概述在玩 Kubernetes 的时候,经常会接触到 Operator,例如常见的 etcd operator 等。但是在实际上使用下来会发现,所谓的 Operator 和 Controller 其实都差不多,都是编写 CRD,然后用 Controller 去监听 CRD 的变化并且响应变化,那么 Operator 和 Controller 到底区别在哪里。1. 什么是 Operator根据一些 Kubernetes 官方文档介绍, Operator 是用来扩展 Kubernetes,用于原创 2021-10-11 21:37:44 · 2427 阅读 · 0 评论 -
Kubernetes CRD 系列(一):CRD 介绍
CR(Custom Resource)其实就是在 Kubernetes 中定义一个自己的资源类型,是一个具体的 “自定义 API 资源” 实例,为了能够让 Kubernetes 认识这个 CR,就需要让 Kubernetes 明白这个 CR 的宏观定义是什么,也就是需要创建所谓的 CRD(Custom Resource Definition)来表述。可能这么说并不是太直观,换个方式表达一下,我们想要创建一个 Pod 的时候,那么会编写一个 YAML 配置,然后前两行一般会这么写:[root@l原创 2021-10-11 21:30:34 · 7299 阅读 · 0 评论 -
Kubernetes 权限管理 RABC
kubernetes 主要通过 APIServer 对外提供服务,对于这样的系统集群来说,请求访问的安全性是非常重要的考虑因素。如果不对请求加以限制,那么会导致请求被滥用,甚至被黑客攻击。kubernetes 对于访问 API 来说提供了两个步骤的安全措施:认证和授权。认证解决用户是谁的问题,授权解决用户能做什么的问题。通过合理的权限管理,能够保证系统的安全可靠。下图是 API 访问要经过的三个步骤,前面两个是认证和授权,第三个是 Admission Control,它也能在一定程度上提高安全性,不原创 2021-08-30 19:48:59 · 452 阅读 · 0 评论 -
Kubernetes: no such host dial tcp: lookup on 10.96.0.10:53
https://stackoverflow.com/questions/53322353/kubernetes-no-such-host-for-modify-hostname-slavehttps://prefetch.net/blog/2017/12/30/getting-your-kubernetes-node-names-right/原创 2021-08-30 19:20:47 · 5110 阅读 · 0 评论 -
Kubernetes StatefulSet 实现原理
在 Kubernetes 的世界中,ReplicaSet和Deployment主要用于处理无状态的服务,无状态服务的需求往往非常简单并且轻量,每一个无状态节点存储的数据在重启之后就会被删除,虽然这种服务虽然常见,但是我们仍然需要有状态的服务来实现一些特殊的需求,StatefulSet 就是 Kubernetes 为了运行有状态服务引入的资源,例如 Zookeeper、Kafka 等。这篇文章会介绍 Kubernetes 如何在集群中运行有状态服务,同时会分析这些有状态服务 StatefulSet ...原创 2021-08-30 17:25:31 · 439 阅读 · 0 评论 -
flannel vxlan切换成host-gw
flannel 支持多种 backend,前面我们讨论的是 vxlan,host-gw 是 flannel 的另一个 backend,本节会将前面的 vxlan backend 切换成 host-gw。与 vxlan 不同,host-gw 不会封装数据包,而是在主机的路由表中创建到其他主机 subnet 的路由条目,从而实现容器跨主机通信。要使用 host-gw 首先修改 flannel 的配置 flannel-config.json:{"Network": "10.2.0.0/16","Subnet原创 2021-08-25 21:04:00 · 1183 阅读 · 1 评论 -
Kubernetes网络和集群性能测试
准备测试环境在以下几种环境下进行测试:Kubernetes集群node节点上通过Cluster IP方式访问 Kubernetes集群内部通过service访问 Kubernetes集群外部通过traefik ingress暴露的地址访问测试地址Cluster IP: 10.254.149.31Service Port:8000Ingress Host:traefik.sample-webapp.io测试工具Locust:一个简单易用的用户负载测试工具,用来测试web或原创 2021-08-25 20:54:42 · 5812 阅读 · 0 评论 -
k8s参数优化实战
1.kubelet#/var/lib/kubelet/config.yamlapiVersion: kubelet.config.k8s.io/v1beta1authentication: anonymous: enabled: false webhook: cacheTTL: 2m0s enabled: true x509: clientCAFile: /etc/kubernetes/pki/ca.crtauthorization: mode:原创 2021-08-24 21:56:34 · 694 阅读 · 0 评论 -
Kubernetes集群版本1.18.2 升级到1.22
k8s不支持跨多个版本升级!因此要1.18-1.19-1.20-1.21-1.22升级难点生产集群的升级,不能影响业务容器的运行,k8s组件较多,升级过程中,任何一个组件出现问题,都可能影响到业务,对于核心业务,如果批量重启,可能造成灾难,因此, 集群的升级需要,业务容器无感知,基于社区的升级方案主要有几个问题:版本的升级,不能跨大版本,只能从小版本逐步升级,升级繁琐 升级过程中,出现问题,不能回滚 升级会造成容器重建,影响业务的运行难点分析跨版本升级其中一个最大的问题是kubelet原创 2021-08-24 21:47:11 · 2754 阅读 · 0 评论 -
pvc 无法删除
kubectl patch pvc pvname -p ‘{“metadata”:{“finalizers”:null}}’ -n namespace转载 2021-08-24 19:39:27 · 326 阅读 · 0 评论 -
Kubernetes安装local-path-provisioner基于HostPath使用动态PV
获取local-path-provisionergit clone https://github.com/rancher/local-path-provisioner.git修改local-path-storage.yamlvi local-path-provisioner/deploy/local-path-storage.yaml修改前(修改部分):---kind: ConfigMapapiVersion: v1metadata: name: local-path-c原创 2021-08-19 15:32:23 · 1154 阅读 · 0 评论 -
记一次 controller manager and scheduler 重复重启问题分析
首先发现的报错讯息:Aug 10 15:43:53 hetu-fr-2d kubelet[1586]: E0810 15:43:53.135619 1586 controller.go:178] failed to update node lease, error: Put https://kapi-xxx-xx:6443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/node02?timeout=10s: read...原创 2021-08-11 20:50:18 · 4481 阅读 · 0 评论 -
K8S集群优化之路由转发:使用IPVS替代iptables
k8s开启ipvs1.加载内核模快lsmod|grep ip_vsmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4yum install ipvsadm ipset -y2.修改kube-proxy配置kubectl edit configmap kube-proxy -n kube-system m原创 2021-08-04 21:26:07 · 1671 阅读 · 0 评论 -
Kubernetes 系列知识拓展
kube-promethuse 编写jsonnet Kube-prometheus提供的yaml都是由jsonnet生成的,我们也可以使用它的思想来编写jsonnet然后转为yaml文件。 在目录jsonnet/kube-prometheus/alerts下按jsonnet语法编写告警规则。 执行docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci jb update拉取并更新jsonnet环境..原创 2021-08-04 21:44:44 · 366 阅读 · 0 评论