![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
docker
文章平均质量分 69
nangonghen
这个作者很懒,什么都没留下…
展开
-
容器镜像的设计原理
镜像在存储实现上的设计原创 2023-04-14 01:20:58 · 530 阅读 · 1 评论 -
docker pull遇见自签证书的https registry
docker pull时需要校验CA的合法性,几条命令解决原创 2023-04-13 21:41:58 · 569 阅读 · 0 评论 -
docker registry提示Layer already exists但blob数据不存在
docker registry的GC行为导致了数据的不一致原创 2022-05-22 15:19:28 · 4691 阅读 · 0 评论 -
[ docker-ce源码分析系列 ] 修改resolv.conf文件被还原的原因
docker resolv.conf文件被覆盖的原因原创 2022-01-05 00:37:42 · 1611 阅读 · 0 评论 -
[ docker-ce源码分析系列 ]docker exec残留sh进程的原因
1 概述:1.1 环境版本信息如下:a、操作系统: centos 7.6,amd64b、服务器docker版本:v18.09.2c、docker的存储驱动: overlay22 现象:执行 [ docker exec -it 容器ID sh ]命令,用户可在容器中执行shell指令进行各种操作,此时用户直接kill掉docker exec命令,或者直接关闭xshell,则该sh进程依然残留在容器中,这种sh进程会消耗虚拟终端的数量,本质上是消耗文件描述符。如果用户退出时不是通过执行exit指原创 2021-10-10 22:47:02 · 706 阅读 · 0 评论 -
[ docker-ce源码分析系列 ]docker build源码简析
1 概述:1.1 环境版本信息如下:a、操作系统: centos 7.6,amd64b、服务器docker版本:v18.09.2c、docker的存储驱动: overlay22 源码简析:用户执行docker build命令,本篇文章简要分析docker daemon构建镜像的过程。2.1 服务端注册路由initRoutes()r.postBuild就是处理docker build请求的方法。func (r *buildRouter) initRoutes() { r.routes原创 2021-09-20 15:53:41 · 704 阅读 · 0 评论 -
buildkit对接私有仓库
1 概述:1.1 buildkit是什么BuildKit(https://github.com/moby/buildkit)是Docker官方社区推出的下一代镜像构建工具(独立运行于Docker),使用它可以更加快速、有效、安全地构建容器镜像。Docker v18.06版本开始集成该组件。BuildKit可用于多种导出格式(例如OCI)以及前端支持(Dockerfile),可以非root用户运行,并提供高效缓存、并行构建等功能。BuildKit支持的容器运行时包括containerd和runc。bui原创 2021-08-03 23:11:25 · 3380 阅读 · 0 评论 -
nginx ingress按照http header进行路由
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6b、kubernetes版本:v1.15.0c、ingress nginx版本:0.47.01.2 nginx按照http header转发流量nginx的配置文件nginx.confg中,可使用if语句块来转发流量,表达式包含http header的判断,执行语句是proxy_pass指令,格式类似:if ($http_region = "sz") { proxy_pass http://echo-sz.defaul原创 2021-06-10 02:26:45 · 4594 阅读 · 0 评论 -
[ docker-ce源码分析系列 ]创建(create)容器简析
1 概述:1.1 环境版本信息如下:a、操作系统: centos 7.6,amd64b、服务器docker版本:v18.09.22 源码简析:用户docker run,client至多会向docker daemon发起三次远程调用,分别是创建(拉取)镜像、创建容器、启动容器。本篇文章分析创建容器这个远程调用。2.1 注册路由initRoutes()func (r *containerRouter) initRoutes() { r.routes = []router.Route{原创 2021-03-28 01:57:10 · 827 阅读 · 2 评论 -
golang代码执行kubectl apply
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6,amd64b、kubernetes版本:v1.15.0c、docker版本:v1.18.06d、golang版本: v1.132 代码:指定多个目录或文件,效果等同于kubectl apply。package mainimport ( "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/printers" cliresourc原创 2021-03-26 00:08:02 · 757 阅读 · 0 评论 -
源码编译docker-ce v18.09.2(简单易懂100%成功)
1 概述:1.1 环境版本信息如下:a、操作系统: centos 7.6,amd64b、服务器docker版本: v18.06.0c、服务器git版本: 1.8.3.1d、目标编译的docker版本: v18.09.22 前置准备2.1 宿主机安装docker编译环境是一个容器,因此需要在宿主机安装容器引擎,在后续的步骤中运行出一个容器来编译目标软件docker-ce v18.09.2。yum install yum-utils -yyum-config-manager --add-原创 2021-03-09 22:12:32 · 1952 阅读 · 1 评论 -
源码编译rancher v2.5.6和debug in kubernetes
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6,amd64b、kubernetes版本:v1.18.16c、docker版本:v1.18.06d、rancher版本:v2.5.6e、golang版本: v1.14f、goland版本: 2020.32 安装go环境和docker:省略。3 编译和构建镜像:3.1 在裸机环境执行编译构建命令mkdir -p /opt/ && cd /opt/# 下载rancher源码git clone原创 2021-03-05 23:39:48 · 960 阅读 · 3 评论 -
故障恢复时期kubernetes dns的响应超过15秒
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6c、kubernetes版本:v1.15.01.2 故障恢复时期下的dns查询延时的现象kubernetes dns的实现是coredns,以Deployment的形式双副本分别部署两个节点。一个coredns实例立刻死亡(服务器瞬间宕机,k8s service流量未进行切除),业务pod查询dns时,有机会得到dns服务器的时间长达15秒的失败响应(因为/etc/resolv.conf文件默认超时5秒,重试2次)。等ku原创 2021-02-04 23:29:22 · 760 阅读 · 0 评论 -
kubernetes configmap热更新源码简析
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6c、kubernetes版本:v1.15.01.2 configmap热更新原理概述configmap(secret的热更新也是一个原理)是kubernetes支持的卷的一种,底层原理是kubelet根据configmap中的内容在宿主机上写成若干文件(目录默认是/var/lib/kubelet/pods/<pod的UUI>/volumes/kubernetes.io~configmap/<卷名>),原创 2020-12-14 02:10:47 · 1400 阅读 · 0 评论 -
[ thanos源码分析系列 ]thanos sidecar组件源码简析
1 概述:1.1 源码环境版本信息如下:a、thanos组件版本:v0.16.01.2 Thanos Sidecar的作用Thanos Query组件和prometheus实例绑定在一起,三大作用:1)作为访问代理,对客户端暴露grpc接口,业务逻辑是访问其绑定的prometheus实例的http接口,从而获取metrics和rule数据,最终返回给客户端。2)如果开启对象存储功能,会将promethues tsdb目录下的所有block目录上传至指定的对象存储系统中。3)监听promet原创 2020-12-06 11:43:04 · 1340 阅读 · 0 评论 -
kubernetes exec源码简析
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6c、kubernetes版本:v1.15.01.2 exec原理概述为进入目标pod的目标容器中执行命令(挂载标准输入和输出、标准错误的情景),kubectl exec访问kube-apiserver的connect接口(中间过程是通过http协议来握手,之后升级为spdy协议),kube-apiserver把请求转发至对应节点的kubelet进程,而kubelet进程此时是一个反向代理,再把请求转发至cri shim程序(原创 2020-12-01 01:38:15 · 1138 阅读 · 0 评论 -
kubernetes部署skywalking集群和JAVA服务的接入
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6a、skywalking版本:v8.0.1c、kubernetes版本:v1.18.5d、es版本:6.4.3e、helm版本: helm31.2 skywalking概述1.2.1 skywalking是什么SkyWalking是一个开源的APM系统,为云原生分布式系统提供监控、链路追踪、诊断能力,支持集成多种编程语言的应用(java、php、go、lua等),也能和服务网格进行集成。除了支持代码侵入方式的集成,一原创 2020-11-28 20:33:29 · 3068 阅读 · 0 评论 -
kubelet驱逐机制的源码分析
1 概述:1.1 源码环境版本信息如下:a、kubernetes集群:v1.15.01.2 维持节点稳定的两道防线对于linux操作系统,CPU时间片、内存、磁盘IO、PID等都是系统资源。系统资源的一种分类:a、可压缩资源(CPU)b、不可压缩资源(内存、磁盘容量和inode、PID)kubelet作为节点代理,自然而然需要一定机制保证服务器资源不会被耗尽。当可压缩资源不够时,Pod(容器或进程)会饥饿,但不会被操作系统和kubelet进行强制退出。当不可压缩资源(例如内存)不够用时,原创 2020-11-15 00:04:53 · 846 阅读 · 0 评论 -
扩展Prometheus的解决方案thanos的简介和几个月使用心得
1 云原生监控的事实标准Promethues:监控系统的历史悠久,是一个颇为成熟的领域,而Prometheus作为新生代的开源监控系统,慢慢成为了云原生体系的监控事实标准,也证明了其设计得到业界认可。Prometheus启发于Google公司的borgmon监控系统,由google前员工在2012年作为社区开源项目创建和开发,并于2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation,成为仅次于Kubernetes的第二把交椅的项目。原创 2020-09-15 14:13:58 · 7934 阅读 · 2 评论 -
疑惑:client-go将http响应序列化为k8s对象时,特意删除gvk信息
1)现象:k8s对象丢失gvk信息通过client-go获取一个pod对象,却发现整个对象没有gvk信息,debug之后才发现是特意去掉gvk信息,个人很疑惑。原创 2020-07-28 22:42:58 · 305 阅读 · 0 评论 -
kubernetes replicaset基础原理
1)概述replicaset对象描述一个[ 特定版本 ]的[ 应用 ],控制着pod的属性(镜像、容器的环境变量等等)以及数量。说明:1)replicaset对象不控制pod对象的版本,针对的是同一个镜像的pod。2)deployment对象控制的是replicaset对象,它才能描述一个应用,因为应用有版本之分。2)大致原理replicaset的控制器会监听kuberntes的pod对象、replicaset对象,这些被监听的对象之变动,就会触发syncLoop循环(叫做syncReplica原创 2020-05-16 02:33:22 · 302 阅读 · 0 评论 -
kubernetes daemonset基础原理
1)概述代理性质的进程需要在每一个节点上,或多个节点上运行,此时可以使用kuberntes daemonset来实现。在实际中,一般会将日志采集的代理、网络插件通过daemonset方式及进行部署。2)大致原理daemonset的控制器会监听kuberntes的daemonset对象、pod对象、node对象,这些被监听的对象之变动,就会触发syncLoop循环让kubernetes集群朝着...原创 2019-12-21 01:16:25 · 1014 阅读 · 0 评论 -
Kubernetes控制器删除策略
1)概括Kubernetes控制器的删除有3种模式:a、Foreground:删除控制器之前,先删除控制器所管理的资源对象删除。b、Background:删除控制器后,控制器所管理的资源对象由GC在后台进行删除。c、Orphan:只删除控制器,不删除控制器所管理的资源对象。2)rest api格式(以Deployment控制器为例):a、只删除控制器(对应ReplicSet和P...原创 2019-10-06 21:57:16 · 2173 阅读 · 0 评论 -
docker搭建zookeeper集群
环境概览IPzok的ID192.168.35.711192.168.35.722192.168.35.733配置文件目录——/opt/zookeeper/conf/数据目录——/opt/zookeeper/data/日志目录——/opt/zookeeper/logs/提示:每个zk节点的配置zoo.cfg文件都是相同的,data目录下的myid文...原创 2019-10-03 23:39:33 · 222 阅读 · 0 评论 -
docker、namespace、crgoup的基础原理和测试
概述1)namespace和crgoup是linux内核的特性。namespace负责[ 进程视野上 ]的环境隔离,cgroup负责[ 进程组 ]的资源配额限制。2)进程和namespace、crgoup的关系1 )父进程通过 fork 创建子进程时,使用 namespaces 技术(带上namespace相关的参数),实现子进程与父进程以及其他进程之间命名空间的隔离。2 )子进程创建完毕...原创 2019-10-03 22:37:54 · 255 阅读 · 0 评论 -
使用docker构建fastdfs集群
使用docker构建fastdfs集群相关链接相关软件和Dockerfile的仓库:https://github.com/gzlj/fastdfs.git搭建双tracker双storage的fastdfs集群相关链接相关软件和Dockerfile的仓库:https://github.com/gzlj/fastdfs.git搭建双tracker双storage的fastdfs集群主机概况...原创 2019-05-09 11:03:47 · 4156 阅读 · 2 评论