
容器技术
shida_csdn
Keep Running ...
展开
-
Crane 成本优化工具体验记录
Crane 成本优化工具实验记录准备集群本文通过 kind 创建一个四节点集群环境:# cat << EOF > cluster.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- role: control-plane- role: worker- role: worker- role: workerEOF# kind create cluster --config cluster.yaml安装原创 2022-03-23 11:19:56 · 1121 阅读 · 0 评论 -
基于 KEDA 和 WorkloadSpread 的弹性 HPA 实验
准备集群本文通过 kind 创建一个四节点集群环境:Linux amd64 机器安装 kind 命令:# curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64# chmod +x ./kind# mv ./kind /usr/bin/kind初始化集群:# cat << EOF > cluster.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1原创 2022-03-22 19:43:51 · 374 阅读 · 0 评论 -
配置 Mac M1 支持运行 linux/amd64 镜像
Mac M1 电脑由于采用了 arm64 架构,导致默认运行的 Docker 架构也是 arm64 的,某些特殊的镜像不支持 arm64 导致问题,而 amd64 架构默认支持度更好,本文介绍如何切换 Docker 架构为 amd64.打开终端,编辑 ~/.zshrc 文件,追加如下环境变量:export DOCKER_DEFAULT_PLATFORM=linux/amd64测试是否生效:MacBook-Pro ~ % source ~/.zshrcMacBook-Pro ~ % docker原创 2022-03-22 10:52:45 · 11232 阅读 · 0 评论 -
Shell: 基于 nsenter 批量配置 Pod 容器的 iptables 规则
注意 nsenter 需要配置 EOF 完成标准输入,范式如下:nsenter -t $pid -n bash <<EOFsomething run in container namespaceexitEOF例如,给容器批量设置 iptables 规则的写法,如下:for id in $(docker ps | grep k8s_POD | awk '{print $1}')do pid=$(docker inspect $id -f '{{.State.Pid}}')原创 2021-07-22 23:24:24 · 632 阅读 · 0 评论 -
查找 Docker 容器内文件系统在宿主机上的位置
Docker 文件系统是在宿主机上完成 Merge 后,再挂载到容器内的,我们可以通过 `docker inspect` 命令快速定位容器文件系统在宿主机上对应的目录:```sh# docker inspect --format='{{.GraphDriver.Data.MergedDir}}' <容器 ID>/var/lib/docker/overlay2/756eb8b3d8663ff88c75c8b2cb24a5ea3d4762da69c68bd9c92bfe3c0c56b36原创 2021-05-25 10:21:17 · 8602 阅读 · 0 评论 -
Prometheus 使用 node hostname 抓取 metrics 指标
Prometheus 使用 node hostname 抓取节点指标配置示例如下:- job_name: monitoring/node-exporter-hostname/0 kubernetes_sd_configs: - role: node scrape_interval: 30s scheme: http tls_config: insecure_skip_verify: true bearer_token_file: /var/run/secrets/kube原创 2021-04-20 21:58:15 · 1522 阅读 · 0 评论 -
kubeadm join: couldn't validate the identity of the API Server
执行 kubeadm join 报如下错误:error execution phase preflight: couldn't validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s出现该问题可能有多种原因:1. token 过期此时需要通过 k...原创 2020-03-26 16:58:46 · 5701 阅读 · 2 评论 -
Kube Proxy 工作模式对比分析
引言Kube Proxy 是 Kubernetes 生态的核心组件之一,主要负责处理访问 Service 的流量(包括通过 Cluster IP 以及 Node Port),自动将 Client 对 Kubernetes Service 的请求代理到正确的 Pod 或 Node 后端。截止 1.18 版本,Kube Proxy 能够支持的运行模式有 4 种,其平台支持情况如下表:Mod...原创 2020-03-03 10:58:45 · 1584 阅读 · 0 评论 -
kube-proxy: Failed to load kernel module ip_vs with modprobe.
偶遇 kube-proxy ipvs 模式不能正常工作,报错如下:W0301 09:14:39.492670 1 proxier.go:498] Failed to load kernel module ip_vs with modprobe. You can ignore this message when kube-proxy is running inside containe...原创 2020-03-01 17:48:49 · 2640 阅读 · 0 评论 -
CentOS 安装 cri-o (yum install crio)
官方说明:https://github.com/cri-o/cri-o#installing-cri-o实际验证:[root@test ~]# yum install crioLoaded plugins: fastestmirror, langpacksLoading mirror speeds from cached hostfile * base: linux-mirrors.fn...原创 2020-02-26 20:53:27 · 3507 阅读 · 4 评论 -
kubeadm 集群初始化参数 pod-network-cidr 有什么作用?
问题kubeadm init 创建集群时有个参数,即 pod-network-cidr,在以往使用过程中,不设置该参数似乎创建的集群也能正常工作,那它究竟有什么作用呢?影响范围kubeadm 给出的参数释义是:--pod-network-cidr Specify range of IP addresses for the pod network. If set, the control p...原创 2020-02-16 12:35:00 · 34208 阅读 · 3 评论 -
配置 kube-proxy 基于 ipvs 模式工作
引言kube-proxy 目前(v1.17)支持多种工作模式,如:userspace、iptables、ipvs,以及仅在 windows 环境可选的 kernelspace 等。在 linux 环境,未配置 kube-proxy 工作模式的情况下,将优先使用 iptables 模式运行,在不满足 iptables 模式工作条件时,自动回退到 userspace 模式。在 windows 环境,...原创 2020-01-21 10:44:59 · 2039 阅读 · 1 评论 -
修改 Docker Cgroup Driver 为 systemd
Docker 在默认情况下使用的 Cgroup Driver 为 cgroupfs:# docker infoClient: Debug Mode: falseServer: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 19.03.5 Storage Driver: o...原创 2020-01-20 17:21:58 · 15253 阅读 · 3 评论 -
基于 Cluster API 管理集群
前言Kubernetes Cluster API 提供了一种声明式的集群创建、配置、管理模式,能够对集群的全生命周期进行有效管理(https://cluster-api.sigs.k8s.io/introduction.html)本文提供简单试用记录。准备 Kubernetes 集群(管理集群)节点操作系统IPDocker 版本kubernetes 版本网络nod...原创 2020-01-15 19:29:52 · 3046 阅读 · 0 评论 -
MountVolume.SetUp: couldn't propagate object cache: timed out waiting for the condition
问题描述Kubernetes 集群某个节点无法正常启动 Pod,一直呈 ContainerCreating 状态查看 Pod 状态,报类似如下错误: Warning FailedMount 39m kubelet, node1.example.com MountVolume.SetUp failed for volume "default-token-f622k" : could...原创 2019-10-24 18:58:31 · 3025 阅读 · 0 评论 -
dial tcp 10.96.0.1:443: connect: network is unreachable
今天,在部署 k8s 集群时,发现 CoreDNS 一直无法启动成功,报类似标题所示的错误,现记录下问题排查的主体过程:1. 首先,正常情况下,所有 Node 应该都能够访问 10.96.0.1:443,到 CoreDNS Pod 所在节点,执行:# curl https://10.96.0.1curl: (60) Peer's Certificate issuer is not re...原创 2019-10-17 18:18:43 · 10960 阅读 · 3 评论 -
Kubernetes 源码部分编译(快速编译其中一个模块) 单独编译 k8s 某个模块
一、问题描述 Kubernetes 源码自带了编译脚本,简单执行 make quick-release 即可编译 但遗憾的是,该命令会编译所有的源码,耗时较长,这对于 Kubernetes 开发来说无疑是高代价的 因此,我们有了单独编译部分代码的需求,本文就介绍一种简单的方法二、部分编译步骤 考虑到 Kubernetes ...原创 2018-10-10 15:29:13 · 1038 阅读 · 2 评论 -
Helm 源码编译
一、背景介绍 helm 是重要的 k8s 包管理工具,其源码托管在:https://github.com/helm/helm 本文介绍如何基于 ubuntu 18.04 环境,源码编译 helm二、编译步骤2.1 安装 golang、git # apt install golang git -y2.2 配置 GOPATH、PATH 环境变...原创 2019-01-22 09:54:04 · 1338 阅读 · 0 评论 -
kubernetes federation-v2 架构分析、安装部署与示例验证
一、引言 Federation (集群联邦)是 k8s 社区中重要的多云管理项目,实现了跨地区跨服务商管理多个 k8s 集群的功能。 它主要提供了如下两个模型:跨集群同步资源:Federation能够让资源在多个集群中同步。 跨集群发现:Federation 能够在所有集群的后端自动配置 DNS 服务和负载均衡。二、Federation v2 架构...原创 2018-12-24 18:06:02 · 3859 阅读 · 0 评论 -
kube-proxy 原理分析和技术演进
一、引言 谈到 kube-proxy,就不得不提到 k8s 中的 Service,下面就对二者的关系作简单介绍:kube-proxy 其实就是管理 Service 的访问入口,包括集群内 Pod 到 Service 的访问和集群外访问 Service; kube-proxy 管理 Service 的 Endpoints,该 Service 对外暴露一个 Virtual IP...原创 2018-12-21 17:55:56 · 1124 阅读 · 0 评论 -
Pod 共享存储
一、前言 Pod 是 kubernetes 的最小工作单元,每个 Pod 包含一个或多个容器。 Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。 Kubernetes 引入 Pod 主要基于下面两个目的: 1. 可管理性 有些容器天生就是需要紧密联系,一起工作。 ...原创 2018-12-20 14:07:45 · 3067 阅读 · 1 评论 -
使用 kind 快速部署 Kubernetes 实验集群
一、简介 kind(Kubernetes in docker) 是一个使用 Docker 容器作为 Node 节点,运行本地 Kubernetes 集群的工具。 kind 十分简捷,只要有 docker 运行环境,就可以使用 kind 非常简单地创建 k8s 集群。 官网地址:https://github.com/kubernetes-sigs/ki...原创 2018-12-20 14:37:38 · 2948 阅读 · 1 评论 -
Docker 使用 macvlan 实现跨主机网络通信
一、背景 macvlan 本身是 linux kernel 模块,是一种网卡虚拟化技术; 它允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。 macvlan 的最大优点是性能极好,它不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络。...原创 2018-12-13 21:12:45 · 2131 阅读 · 0 评论 -
Error in configuration: context was not found for specified context: kubernetes-kind-2-admin@kind-2
使用 kind (kubernetes in docker) 工具部署多集群,切换集群后执行 kubectl 出现如下问题:Error in configuration: context was not found for specified context: kubernetes-kind-2-admin@kind-2问题分析:1. 查看存在的 kubectl context...原创 2018-12-19 15:58:56 · 3205 阅读 · 0 评论 -
Docker 实现基础 —— Linux Namespace
Linux Namespace 是 Kernel 的一个功能,它可以隔离一系列的系统资源,比如 PID、UserID、NetWork 等。 Linux Namespace 主要包含以下几种:UTS Namespace:隔离 nodename 和 domainname,以便设置独立的 hostname; IPC Namespace:隔离 System V IPC 和 POS...原创 2018-11-30 16:08:08 · 341 阅读 · 0 评论 -
Ubuntu 18.04 安装 vagrant & VirtualBox
在 Ubuntu 18.04 环境下,安装 vagrant 十分简单,只需执行以下命令: # apt install virtualbox -y# wget -c https://releases.hashicorp.com/vagrant/2.0.3/vagrant_2.0.3_x86_64.deb# dpkg -i vagrant_2.0.3_x86_64.deb# vagrant...原创 2018-11-09 17:28:55 · 3993 阅读 · 1 评论 -
kubectl 插件加载原理
一、前言 kubectl 提供了一种插件扩展机制,以丰富和增强其对集群的管控能力, 目前,1.13 版的 kubernetes 中,kubectl 插件扩展功能已经处于 beta 阶段。 原文介绍:https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/二、插件加载原理...原创 2019-02-28 17:52:06 · 957 阅读 · 0 评论 -
Forwarding loop detected in "." zone. Exiting. See https://coredns.io/plugins/loop#troubleshooting
ubuntu 下 使用 minikube 部署 k8s 集群,发现 coredns 起不来记录一种临时的解决办法:1、kubectl edit cm coredns -n kube-system2、delete ‘loop’ , save and exit3、restart coredns pods by:"kubctel delete pod coredns.... -n k...原创 2019-02-26 15:16:46 · 2153 阅读 · 0 评论 -
[Kubernetes] Kubernetes 集成 traefik ingress 实现 服务暴露
1. 背景 Kubernetes Service 服务默认只能内网访问,而使用 nodePort 方式的服务暴露会在每台服务器上开放目标端口, 存在大量端口占用现象,难以应用于生产环境,本文介绍通过 traefik ingress 方式实现内部服务的外部可访问化。2. 基本步骤2.1 导入 traefik 镜像到 kubernetes 集群(如果是内网环境,就上传原创 2018-01-08 15:08:58 · 2273 阅读 · 0 评论 -
failed to decode cluster configuration data: no kind "ClusterConfiguration" is registered
kubeadm 执行 join 报如下错误:error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: failed to decode cluster configuration data: no kind "ClusterConfiguration" is registered for ver...原创 2019-09-02 14:32:09 · 3860 阅读 · 0 评论 -
runc 源码编译(基于 ubuntu 18.04)
一、基础环境Ubuntu 18.06go 1.12.5二、编译步骤# apt install pkg-config libseccomp-dev -y# git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc"# cd "$GOPATH/src/...原创 2019-08-27 18:09:41 · 1035 阅读 · 2 评论 -
Kubelet 垃圾回收
Kubelet 垃圾回收(Garbage Collection)是一个非常有用的功能,它负责自动清理节点上的无用镜像和容器。Kubelet 每隔 1 分钟进行一次容器清理,每隔 5 分钟进行一次镜像清理(截止到 v1.15 版本,垃圾回收间隔时间还都是在源码中固化的,不可自定义配置)。如果节点上已经运行了 Kubelet,不建议再额外运行其它的垃圾回收工具,因为这些工具可能错误地清理掉 Kubel...原创 2019-08-19 16:37:03 · 2109 阅读 · 0 评论 -
CentOS 安装指定版本 Kubernetes
1. 添加 k8s 源cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpg...原创 2019-06-24 17:05:17 · 1342 阅读 · 0 评论 -
本地构建、运行 kubernetes/website
背景本文介绍如何在本地快速将 kubernetes/website 项目运行起来。步骤构建运行镜像项目里已经包含运行时镜像的 Dockerfile,我们只需执行 make docker-image:$ make docker-imagedocker build . --tag kubernetes-hugo --build-arg HUGO_VERSION=0.49Sending b...原创 2019-06-13 16:01:53 · 781 阅读 · 0 评论 -
Kubernetes Prow 部署笔记
创建 minikube 集群$ minikube start --vm-driver none账户密钥设置生成 hmac-token,该密钥提供给 GitHub 用于验证 Webhook$ openssl rand -hex 20 > ./hmac$ kubectl create secret generic hmac-token --from-file=hmac=./h...原创 2019-06-05 12:28:31 · 1477 阅读 · 0 评论 -
容器文件日志重定向到控制台的另类方法 —— 软链接
一、背景介绍 我们知道,Docker 容器的日志是需要打印到控制台上才能被有效采集的,至少这是官方的日志输出方案。 实际工作中,常用命令 docker logs 打印出的也正是 Docker 容器在控制台上输出的信息。 但现实环境下,大多数应用都会把日志输入到文件中,这给应用的容器化带来了一些困扰。 要实现日志打印到控制台,是修改 l...原创 2019-05-10 23:24:03 · 4997 阅读 · 0 评论 -
Kubernetes 资源配额和资源限制管理
引言在 Kubernetes 体系中,资源默认是被多租户共享使用的,租户间不可避免地存在资源竞争问题。为了满足不同租户多样的服务质量需求,集群管理员需要为租户设置非常精细的资源配额以及资源限制。截止 1.14 版本,Kubernetes 已经支持分别从 Namespace、Pod 和 Container 三个级别对资源进行管理。ResourceQuota - 配置 Namespace 资源...原创 2019-03-27 11:52:21 · 1571 阅读 · 0 评论 -
gcr.io 国内源 —— 基于 Travis CI + GitHub + DockerHub + Google Cloud 实现自动定时同步 gcr.io 镜像到 DockerHub
一、背景介绍 由于国内网络原因,gcr.io 仓库里的镜像是无法直接拉取到的,这给开发工作造成了极大的不便 本文介绍一种方法能够实现自动化地定期地将 gcr.io 仓库中的镜像同步到个人 DockerHub 账户 实现该方案需要满足以下条件: a) 已注册 GitHub 账号 https://github.com/ ...原创 2018-10-12 14:02:50 · 3288 阅读 · 2 评论 -
prometheus alertmanager webhook 配置教程
一、背景介绍 本文是 k8s prometheus adapter —— 拓展 k8s 基于 prometheus 实现动态伸缩 的拓展内容 重在讲解如何配置 alertmanager,使其能够以 webhook 的方式触发告警的推送 其工作模式如下图:二、配置步骤2.1 告警 server 代码实现 告警 server...原创 2018-08-23 14:42:45 · 30271 阅读 · 2 评论 -
docker exec 不同用户登入
docker exec 以 root 身份登录容器:# docker exec -it --user root /bin/bash原创 2018-04-02 17:08:59 · 10559 阅读 · 0 评论