从 Borg 到 Kubernetes 云原生操作系统
1.前传 Google 内部的 Borg(约 2003 年起) 故事要从 Google 讲起。 早在公开云和 Docker 流行之前,Google 已经在用容器把一台物理机切成很多隔离的小房间,让搜索、Gmail、YouTube 这类服务挤在一起跑,把机器利用率压到极高。管理这些“房间”的系统叫 Borg。 Borg 不是给外面人用的产品,而是 Google 内部的集群管家。它要回答的问题很朴素:
kubernetes 1.24版本使用docker作为容器运行时
背景 Kubernetes(1.24以及以上版本)官方不在支持docker作为容器运行时了,若要继续使用docker 需要对docker进行配置一番,需要安装cri-docker作为Kubernetes容器。 查看node节点的容器运行时 # 查看指定节点容器运行时 kubectl describe node k8s-node01 | grep Container Container Runtim
配置信任HTTP镜像仓库地址
1. docker使用私有仓库 如果你的是私有镜像仓库,你可以在 Docker 配置文件中添加仓库地址。 Docker 的配置文件/etc/docker/daemon.json 配置如下内容 { "insecure-registries": } 2.Containerd使用私有仓库 配置前检查 确认Container
部署K8S需要开放的端口
当我们部署K8S时,常规操作是关闭防火墙的,这样做确实是为了方便部署,图省事。 如果从安全的角度出发,应该是开启防火墙,开放部署K8S时所需要开放的防火墙端口。 在此,我整理部署K8S时所需要开放的防火墙端口,具体如下: 1. k8s组件端口 (1) Master 节点端口 端口 协议 应用 6443/tcp TCP API Server 2379-2380/tcp TCP etcd 10250/
hostNetwork 与 hostPort 端口冲突
现象:持续两天的“端口冲突” 集群长达一天时间出现奇怪现象: 随机性端口冲突:部分节点上的 Pod 启动时报错 Bind: address already in use,但同一节点其他 Pod 却正常。 端口占用:通过 netstat -tulnp 检查节点端口,但是显示 80 端口“没有被占用”,但 Pod 日志显示“端口被占用”。 重启失效:重启节点后问题暂时消失,但几小时后重新再现。 hos
在K8s上运行Nacos高可用集群
Nacos 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos
metrics-server监控资源使用情况
一、简介 kubectl top是经常使用的基础命令,但是必须需要部署metrics-server组件,才能获取到监控值。 https://github.com/kubernetes-sigs/metrics-server 版本矩阵 Matrix Metrics Server Metrics API group/version Supported Kubernetes version 0.7.x
免费学习K8S的平台
介绍一个完全免费的K8S学习平台,为你搭建在线集群环境,助你轻松驾驭云原生世界! 学习平台:https://killercoda.com/ 这个学习平台,不仅提供了最新版本的K8S集群环境,还为你准备了丰富的学习资源和实验场景。无需繁琐的安装和配置,只需轻轻一点,即可启动你的在线K8S集群。 而且还配置三个不同的配置的K8S环境。 在这个学习平台上还精心准备了包括CKA,CKS和CKAD的场景的实
在Kubernetes上运行数据库
在 Kubernetes 上运行数据库的情况越来越受欢迎;在最近 Portworx 委托进行的使用 Kubernetes 的组织调查中,超过 72% 的受访者表示他们的团队正在Kubernetes 上运行数据库。 显然,围绕Kubernetes 上的数据(DoK) 的讨论已经成熟,因为 Kubernetes 中的持久卷在 2019 年进入通用可用性。拥有更先进 Kubernetes 实践的团队正在
k8s证书有效期修改为10年
现象 通过 kubeadm 安装 kubernetes 集群时会存在一个证书问题:由 kubeadm 生成的客户端证书在 1 年后到期。 k8s 为什么将客户端证书的有效期设置为 1 年呢? kubeadm 会在控制面升级的时候更新所有证书。 如果你对此类证书的更新没有特殊要求, 并且定期执行 Kubernetes 版本升级(每次升级之间的间隔时间少于 1 年), 则 kubeadm 将确保你的集
node节点的pod数量限制
默认为110个,可以修改配置文件。 vim /var/lib/kubelet/config.yaml maxPods: 200 #停止kubelet systemctl stop kubelet #重新载入systemd systemctl daemon-reload #启动kubelet systemctl start kubelet
NodePort的端口范围(修改)
NodePort的端口范围 默认范围为30000-32767,可以修改 vim /etc/kubernetes/manifests/kube-apiserver.yaml 添加一行 - --service-node-port-range=1-65535 kubelet监控/etc/kubernetes/manifests/* ,会自动触发更新。
kubeadm-join
###注意--print-join-command,可以直接打印出kubeadm join信息 # kubeadm token create --print-join-command # join加入 # kubeadm reset # systemctl stop ku
comfigmap热更新
如果ConfigMap和Secret是以subPath的形式挂载的,那么Pod是不会感知到ConfigMap和Secret的更新的。 如果Pod的变量来自于ConfigMap和Secret中定义的内容,那么ConfigMap和Secret更新后,也不会更新Pod中的变量。 postStart:容器启动之前执行的命令 preStop:容器停止之前执行的命令 热更新ConfigMap或Secret:
configmap解决subPath目录覆盖的问题
apiVersion: apps/v1 kind: Deployment metadata: labels: app: demo-nginx name: demo-nginx spec: replicas: 2 selector: matchLabels: app: demo-nginx template: metadata: labels: app: demo-nginx spec: conta
configmap创建
1.利用直接值创建 kubectl create configmap configmap_name --from-literal=key-name=value 2.基于文件创建 kubectl create configmap configmap_name --from-file=file_name 3.基于目录创建 kubectl create configmap configmap_name
Affinity亲和性
Affinity亲和力 NodeAffinity:节点亲和力 PreferredDuringSchedulingIgnoredDuringExecution:软亲和力,尽量部署在满足条件的节点上,或者是尽量不要部署在被匹配的节点。 apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy-with-node-a
kubectl使用技巧
kubectl技巧 资源类型 下表列出的是 kubernetes 中所有支持的类型和缩写的别名。 资源类型 缩写别名 clusters componentstatuses cs configmaps cm daemonsets ds deployments deploy endpoints ep event ev horizontalpodautoscalers hpa ingresses ing
