Dockerfile 及 docker 资源限制

基于dockerfile构建nginx镜像

# 下载nginx源码包到本地 http://nginx.org/download/nginx-1.21.5.tar.gz
~/nginx$ ll
总用量 1052
-rw-rw-r-- 1 yxy yxy     372 1月   7 16:59 Dockerfile
-rw-rw-r-- 1 yxy yxy 1072633 12月 28 23:35 nginx-1.21.5.tar.gz

# 编写 Dockerfile
~/nginx$ cat Dockerfile 
FROM centos:7 as build

RUN yum install gcc make automake pcre-devel openssl-devel zlib-devel systemd -y && yum clean all
ADD nginx-1.21.5.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.21.5
RUN mkdir /opt/nginx && ./configure --prefix=/opt/nginx --with-stream && make && make install

FROM centos:7 
COPY --from=build /opt/nginx /opt/nginx
WORKDIR /opt/nginx

# 基于 Dockerfile 构建镜像
~/nginx$ sudo docker build -t nginx:1.21.5 .
Sending build context to Docker daemon  1.075MB
Step 1/8 : FROM centos:7 as build
 ---> eeb6ee3f44bd
Step 2/8 : RUN yum install gcc make automake pcre-devel openssl-devel zlib-devel systemd -y && yum clean all
 ---> Using cache
 ---> 7da5dc86a302
Step 3/8 : ADD nginx-1.21.5.tar.gz /usr/local/src/
 ---> Using cache
 ---> 29a7617fc3fb
Step 4/8 : WORKDIR /usr/local/src/nginx-1.21.5
 ---> Using cache
 ---> 770c987e83b3
Step 5/8 : RUN mkdir /opt/nginx && ./configure --prefix=/opt/nginx --with-stream && make && make install
 ---> Using cache
 ---> df57203705c9
Step 6/8 : FROM centos:7
 ---> eeb6ee3f44bd
Step 7/8 : COPY --from=build /opt/nginx /opt/nginx
 ---> Using cache
 ---> a12811c4d5b6
Step 8/8 : WORKDIR /opt/nginx
 ---> Running in fc54357a93f9
Removing intermediate container fc54357a93f9
 ---> 085b95eeb479
Successfully built 085b95eeb479
Successfully tagged nginx:1.21.5

# 测试镜像
~/nginx$ sudo docker run -it --rm nginx:1.21.5 /opt/nginx/sbin/nginx -v
nginx version: nginx/1.21.5

容器的cpu和内存的资源限制

# 限制容器使用 1核心CPU
~$ docker run --rm -it --cpus  1 lorel/docker-stress-ng --cpu 3
stress-ng: info: [1] defaulting to a 86400 second run per stressor
stress-ng: info: [1] dispatching hogs: 3 cpu
stress-ng: info: [1] successful run completed in 26.34s

# 限制容器使用 280MB内存
~$ docker run --rm -it -m 280m lorel/docker-stress-ng  --vm 2
WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
stress-ng: info: [1] defaulting to a 86400 second run per stressor
stress-ng: info: [1] dispatching hogs: 2 vm
stress-ng: info: [1] successful run completed in 68.97s

k8s master和node节点各组件的功能

Master 节点

  • etcd

    Kubernetes集群的所有状态信息都需要持久存储于存储系统etcd中。etcd是由CoreOS基于Raft协议开发的分布式键值存储,可用于服务发现、共享配置以及一致性保障(如数据库主节点选择、分布式锁等)。显然,在生产环境中应该以etcd集群的方式运行以确保其服务可用性,并需要制定周密的备份策略以确保数据安全可靠。
    etcd还为其存储的数据提供了监听(watch)机制,用于监视和推送变更。API Server是Kubernetes集群中唯一能够与etcd通信的组件,它封装了这种监听机制,并借此同其他各组件高效协同。

  • kube-apiserver

    API Server是Kubernetes控制平面的前端,支持不同类型应用的生命周期编排,包括部署、缩放和滚动更新等。它还是整个集群的网关接口,由kube-apiserver守护程序运行为服务,通过HTTP/HTTPS协议将RESTful API公开给用户,是发往集群的所有REST操作命令的接入点,用于接收、校验以及响应所有的REST请求,并将结果状态持久存储于集群状态存储系统(etcd)中。

  • kube-controller-manager
    控制器负责实现用户通过API Server提交的终态声明,它通过一系列操作步骤驱动API对象的当前状态逼近或等同于期望状态。Kubernetes提供了驱动Node、Pod、Service、Endpoint、ServiceAccount和Token等数十种类型API对象的控制器。从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们被统一编译进单个二进制程序文件kube-controller-manager(即控制器管理器),并以单个进程运行。

  • kube-scheduler

    Kubernetes系统上的调度是指为API Server接收到的每一个Pod创建请求,并在集群中为其匹配出一个最佳工作节点。kube-scheduler是默认调度器程序,它在匹配工作节点时的考量因素包括硬件、软件与策略约束,亲和力与反亲和力规范以及数据的局部性等特征。

Node 节点

  • kubelet

    kubelet是Kubernetes中最重要的组件之一,是运行于每个Node之上的“节点代理”服务,负责接收并执行Master发来的指令,以及管理当前Node上Pod对象的容器等任务。它支持从API Server以配置清单形式接收Pod资源定义,或者从指定的本地目录中加载静态Pod配置清单,并通过容器运行时创建、启动和监视容器。
    kubelet会持续监视当前节点上各Pod的健康状态,包括基于用户自定义的探针进行存活状态探测,并在任何Pod出现问题时将其重建为新实例。它还内置了一个HTTP服务器,监听TCP协议的10248和10250端口:10248端口通过/healthz响应对kubelet程序自身的健康状态进行检测;10250端口用于暴露kubelet API,以验证、接收并响应API Server的通信请求。

  • kube-proxy

    kube-proxy也是需要运行于集群中每个节点之上的服务进程,它把API Server上的Service资源对象转换为当前节点上的iptables或(与)ipvs规则,这些规则能够将那些发往该Service对象ClusterIP的流量分发至它后端的Pod端点之上。kube-proxy是Kubernetes的核心网络组件,它本质上更像是Pod的代理及负载均衡器,负责确保集群中Node、Service和Pod对象之间的有效通信。

  • 容器运行时环境

    Pod是一组容器组成的集合并包含这些容器的管理机制,它并未额外定义进程的边界或其他更多抽象,因此真正负责运行容器的依然是底层的容器运行时。kubelet通过CRI(容器运行时接口)可支持多种类型的OCI容器运行时,例如docker、containerd、CRI-O、runC、fraki和Kata Containers等。

k8s集群高可用部署

参考 https://github.com/easzlab/kubeasz

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容