版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/91306095
报错:[kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed with error: Get “http://localhost:10248/healthz”: dial tcp [::1]:10248: connect: connection refused.
如果你扛的一手好梯子,可以忽略这一步;但是普遍情况下是无法访问到k8s.gcr.io进行镜像的下载;因此我们可以通过Docker的镜像转换为k8s的镜像;
在自己的Mac系统里面利用Parallels Desktop创建3台虚拟机,具体信息如下:
在三台机器上均安装docker、kubeadm、kubelet,在master节点安装kubectl
报错信息: [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused. 过程回顾: [root@test2 ~]# kubeadm init \ --apiserver-advertise-ad
可以看到执行了 kubeadm init 之后,貌似一直卡住 kubelet 这个进程的健康检查上,日志如下。
kubectl和minikube是部署kubernetes集群的2个重要工具,本文主要介绍如何安装这2个工具。
Docker:1.13.1 kubelet:1.18.0 kubeadm init 报错信息
##########master node #cat /sys/class/dmi/id/product_uuid lsmod | grep br_netfilter modprobe br_netfilter #lsmod | grep br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.
在/etc/docker/daemon.json文件中加入“"exec-opts": ["native.cgroupdriver=systemd"]一行配置,重启docker跟清除一下kubeadm信息即可重新初始化。”
kubelet 是运行在每个节点上的主要的“节点代理”,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务,按照 PodSpec 描述来管理Pod 和其中的容器(PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象)。
在使用k8s部署springboot+redis简单应用这篇文章中,spring boot连接redis是直接使用的IP连接,那么可不可以直接使用服务名称进行连接呢?答案是可以的,这就是k8s集群范围内的DNS服务来完成服务名到ClusterIP的解析,接下来就一起看一下如何搭建DNS服务器。
前期实验性的代码: k8s安装命令(前期测试性) #cat /sys/class/dmi/id/product_uuid lsmod | grep br_netfilter modprobe br_netfilter #smod | grep br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.brid
kubelet不支持SELinux, 这里需要将SELinux设置为permissive模式
如果读者已经按照前文的内容走下来,那么应该能够对k8s有一个非常基础的了解,即如何搭建环境,如何拉起一个容器,如何访问一个容器,这些操作都是我们想要往k8s部署应用所必须会的基本内容,帮助你快速的上手k8s。
使用Kubeadm安装的K8s集群获取kube-scheduler和kube-controller-manager组件状态异常,基本上都会出现这个问题。
在上一篇文章里我们主要介绍安装k8s集群内的基础服务kube-dashboard,这里我们继续介绍安装k8s集群内基础服务nginx-ingress,这个基础服务也创建在kube-system namesapce里,是以deployment的方式运行。当然 daemonset也是可以的,这里没有硬性要求。image镜像从我们的private repo pull(以前文章里介绍过harbor private repo的创建,以及镜像的push和pull)。当然原始image来源于官方的quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1,不过要下载它需要科学上网或者搭个梯子。另外对于ingress方案,一般有nginx-ingress,traefik ingress(traefik2.0也已经问世了,都是可以选择的),haproxy ingress等,实际情况用哪种请根据团队和实际的需求来选择。
k8s最基础的调度单位是pod;当一个pod异常退出的时候会重新创建另一个pod,但是这个时候pod的ip就改变了,所以我们不能直接使用pod-ip来访问其他的pod。
kubelet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如 exec、run、logs 等。
yum安装的etcd默认配置文件在/etc/etcd/etcd.conf。编辑配置文件,更改以下带颜色部分信息:
本文将在前文的基础上介绍在kubernetes集群环境中配置dns服务,在k8s集群中,pod的生命周期是短暂的,pod重启后ip地址会产生变化,对于应用程序来说这是不可接受的,为解决这个问题,K8S集群巧妙的引入的dns服务来实现服务的发现,在k8s集群中dns总共需要使用4个组件,各组件分工如下: etcd:DNS存储 kube2sky:将Kubernetes Master中的service(服务)注册到etcd。 skyDNS:提供DNS域名解析服务。 healthz:提供对skydns服务的健康检查。
故障现象 查看状态存在不健康组件 [root@k8s-master ~]#kubectl get cs Warning: v1 ComponentStatus is deprecated in v1.19+ NAME STATUS MESSAGE ERROR scheduler
这两个pod的非安全端口没有开启,健康检查时报错,但是由于本身服务是正常的,只是健康检查的端口没启,所以不影响正常使用。
Ingress 是一种 Kubernetes 资源,也是将 Kubernetes 集群内服务暴露到外部的一种方式。
健康检测接口用于检测应用的健康状态,在K8S中,使用Readiness和Liveness分别来探测应用是否就绪和是否存活,如果未就绪或者未存活,K8S会采取相应的措施来确保应用可用。
envoy 进程作为 contour 的数据面组件,有时需要被重新部署。可能是由于升级、修改配置、或者节点问题导致的pod漂移。
八、部署master节点 master节点的kube-apiserver、kube-scheduler 和 kube-controller-manager 均以多实例模式运行:kube-scheduler 和 kube-controller-manager 会自动选举产生一个 leader 实例,其它实例处于阻塞模式,当 leader 挂了后,重新选举产生新的 leader,从而保证服务可用性;kube-apiserver 是无状态的,需要通过 kube-nginx 进行代理访问,从而保证服务可用性;下面部署命令均在k8s-master01节点上执行,然后远程分发文件和执行命令。
描述: 说过kubernetes架构中介绍到 k8s Master 由三个组件组成, 分别是API Server、Controller Manager 与 Scheduler
本文章将以 QA 方式记录在使用 TKE 产品过程中的可能会遇到的常见问题解答,将不定期更新。
kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务,但是在使用的时候还有一个问题:怎么知道某个应用的 VIP?比如我们有两个应用,一个 app,一个 是 db,每个应用使用 rc 进行管理,并通过 service 暴露出端口提供服务。app 需要连接到 db 应用,我们只知道 db 应用的名称,但是并不知道它的 VIP 地址。
解决思路: 注释掉/etc/kubernetes/manifests下的kube-controller-manager.yaml和kube-scheduler.yaml的- – port=0 确认kube-scheduler和kube-controller-manager组件配置是否禁用了非安全端口
声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。 如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由 作者一经查实,马上删除。
Service 是 k8s 网络部分的核心概念,在 k8s 中,Service 主要担任了四层负载均衡的职责。本文从负载均衡、外网访问、DNS 服务的搭建及 Ingress 七层路由机制等方面,讲解 k8s 的网络相关原理。
黑盒监控:主要关注的现象,一般都是正在发生的东西,例如出现一个告警,业务接口不正常,那么这种监控就是站在用户的角度能看到的监控,重点在于能对正在发生的故障进行告警。
答:Kubernetes中有一个很重要的特性,服务子发现。一旦一个service被创建,该service的service ip和service port等信息都可以被注入到pod中供它们使用。kubernetes主要支持两种service发现机制,第一种是环境变量,第二种是DNS。没有dns服务的时候,kubernetes会采用环境变量的形式,一个有很多service,环境变量会变得很复杂,为了解决这个问题,我们使用DNS服务。
前面我们创建了一个 Gateway 和 VirtualService 对象,用来对外暴露应用,然后我们就可以通过 ingressgateway 来访问 Bookinfo 应用了。那么这两个资源对象是如何实现的呢?
排查问题时研究了一下 Cilium health probe 相关的代码,本文略作整理,仅供参考。代码基于 1.8.4。
答:Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。 K8S是Google公司推出的,它来源于由Google公司内部使用了15年的Borg系统,集结了Borg的精华。 2、 K8s架构的组成是什么?
当我们将kubernetes的应用部署完之后,就需要对外发布服务的访问地址。kubernetes 将服务发布到外部访问的方式主要有: LoadBlancer Service NodePort Service Ingress
kubelet 使用存活探测器来知道什么时候要重启容器。例如,存活探测器可以捕捉到死锁(应用程序在运行,但是无法继续执行后面的步骤)。这样的情况下重启容器有助于让应用程序在有问题的情况下更可用。
Istio的数据面会在pod中注入两个容器:istio-init和istio-proxy。
wrk是一个开源的、热门的、现代的单机HTTP基准测试工具,目前在github开源平台累计了26.9k的star数目,足以可见wrk在Http基准测试领域的热门程度。它结合了多线程设计和可扩展的事件通知系统,如epoll和kqueue,可以在有限的资源下并发出极致的的负载请求。并且内置了一个可选的LuaJIT脚本执行引擎,可以处理复杂的HTTP请求生成、响应处理以及自定义压测报告。
Prometheus Server 的数据抓取工作基于 Pull 模型,因而,它必须要事先知道各 target 的位置,然后才能从相应的 Exporter 或 Instrumentation 中抓取数据。
你必须拥有一个正常工作的 Kubernetes 1.5 集群,用来运行本文中的示例。该示例使用一个简单的 nginx webserver 回送它接收到的请求的 HTTP 头中的源 IP 地址。你可以像下面这样创建它:
在我之前的文章 K8S 生态周报| Google 选择 Cilium 作为 GKE 下一代数据面[1] 一文中,我介绍了 Google 宣布使用 Cilium 作为 GKE 的下一代数据面,及其背后的故事。
容器技术在国内已经非常火爆,作为IT从业者的一员,必须跟上时代的浪潮,掌握容器相关技术。提到容器技术必然会提到容器的编排系统,在众多编排系统中Google的Kubernetes已跑在了行业的最前端,本文将介绍如何使用kubeadm快速的搭建一套用于学习和测试的kubernetes集群。
Ingress:是k8s 资源对象,用于对外暴露服务,该资源对象定义了不同主机名(域名)及 URL 和对应后端 Service(k8s Service)的绑定,根据不同的路径路由 http 和 https 流量。
昨天收到一个朋友的信息,说不小心把集群的业务namespace干掉了,导致整个业务都停滞了,问我有没有禁止删除namespace的方案。
领取专属 10元无门槛券
手把手带您无忧上云