,笔者接受了 InfoQ 的关于容器镜像运维的采访。 问题1: 请谈谈您对高效安全的镜像运维的理解。 我们觉得这仅仅是在容器运维上面动态的侧面。就是说,把这个运行的平台弄好了之后,还有另外一个侧面就是静态的容器平台,所谓静态的就是这个容器的镜像。 所以高效安全的容器镜像的管理,在任何一个企业的运维里面都是非常必要的,应该说,做得好不好,会实际影响到它的效率,以及安全性的一些问题。 在容器的项目里面,很少是能原生支持中文的,所以这也是我们广大中国用户非常喜欢 Harbor 的一个原因。 问题3: 在运维环境中,镜像来源验证和镜像漏洞扫描为用户带来哪些价值?HA如何实现?
话不多说,开始分享最近在k8s使用和运维上遇到的一些问题和解决经验。 linux/amd64"} Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749 GitCommit:"19e47ee3283ae98139d98460de796c1be1e3975f", GitTreeState:"clean", GoVersion:"go1.13.5"} 三 运维工具 其中,我们通常在持续集成时会使用yaml文件做发布配置,运维时通过命令行操作来执行安装、重启、查看日志等常规操作;而dashboard则是日常观察和问题排查的简单且便捷的方式。 通过dashboard,我们可以查看各service、deployment、pod的健康状况,并在config map中查看已配置参数(运维中很重要,一些服务启动异常,往往是配置有误导致的)。
1 docker容器架构1.1 容器架构• 封装Docker 是一种容器实现方式,利用Linux内核技术封装成称docker。 ):在基础机构上增加了平台服务 (3)SaaS(软件即云):一个成品的云平台,如(云盘,云电视等)2 docker容器概念2.1 docker核心三元素Docker 核心三元素:• 镜像image 这可防止一个容器占用容器主机上太多的资源• SELinux(安全设置):SELinux 是一种强制访问控制系统,用于防止容器互相影响,并且防止容器主机受到其自己运行的容器的影响。 3 docker容器镜像3.1 关于镜像容器镜像是一个文件系统镜像,用以创建和启动容器。此文件系统不但包含应用进程,还包含其所需的依赖:共享库;OS 用户命令;运行的服务。 ,可以参考博主的另外一篇博文:运维实践|Dockerfile自定义镜像原创(https://cloud.tencent.com/developer/article/2364626)。
name: web spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 3 名为 web 的 StatefulSet 有一个 Spec,它表明将在独立的 3 个 Pod 副本中启动 nginx 容器。 72s web-1 1/1 Running 0 43s web-2 0/1 ContainerCreating 0 3s 3 3m13s [root@k8s-master1 ~]# kubectl get statefulsets NAME READY AGE web 3/3 3m16s # kubectl scale statefulset web --replicas=5 # 缩容 $ kubectl patch statefulset web -p '{"spec":{"replicas":3}
Topic的消费kafka-console-consumer.sh More 日常运维 、问题排查 怎么能够少了滴滴开源的 滴滴开源LogiKM一站式Kafka监控与管控平台 1.Topic的发送 默认值) –max-partition-memory-bytes Long 为分区分配的缓冲区大小 16384 –message-send-max-retries Integer 最大的重试发送次数 3 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --whitelist ‘.*’ --from-beginning 3. kafka.tools.NoOpMessageFormatter、kafka.tools.ChecksumMessageFormatter More Kafka专栏持续更新中…(源码、原理、实战、运维
3)如果设置了Prestop钩子,则优先执行Prestop里的优雅动作。 线上基于nacos注册中心的优雅上线 对于请求通过k8s的service层到达pod容器的情况,可以通过k8s优雅机制来确保pod容器在上线滚动更新期间,做到业务"无感知"。 但是目前线上pod容器服务主动注册到nacos配置中心,业务方通过nacos网关调用pod容器服务,即调用请求绕过了k8s的service层。 3)最后再执行pod容器的优雅终止。 容器优雅发布的配置记录: 这里以customer-services应用模块的pod容器优雅配置为例: 1)将nacos主动下线的脚本在镜像制作阶段推送到容器内部 编写customer-services
关于Hyper,大家比较好奇,本文将从三个方面重点分享Hyper的原理和容器云运维:从Docker到Hyper Container,Hyper Container用于公有云,容器云上运维的变化。 容器云上运维的变化 最后想分享一下我对于容器时代运维的一些思考。在容器时代,很多运维理念跟以前不太一样了。 资源视角。以前,资源就是机器,不管是物理机还是虚机。 传统的运维都会有一套配置管理的工具(例如Puppet)来保证集群中每台机器的配置一致,但是在容器时代,一个应用所需要的依赖、配置全部打包进镜像里了,Puppet就不再需要了。 传统的运维方式,就是就是把应用的二进制文件编译好了扔到服务器上,替换旧的,重启服务,发现有问题赶紧把旧文件换回来,回滚服务,这是典型的变更方式。 不过从长远看,把容器各方面汇总起来作为一个完整的生态去看,它带来的总的好处还是会超过付出的成本。一开始运维可能很不适应,但是我相信未来的趋势是容器,我们要往这个方向去努力。
,使容器技术成为主流。 Podman是Red Hat 8和CentOS 8中默认的容器引擎,它基于开放容器倡议(OCI)标准开发、管理和运行容器和Pod。 与Kubernetes兼容Podman旨在使用类似于Kubernetes的方法来构建、管理和运行容器。它支持Pod的概念,即一组容器的集合,这些容器在一个共同的命名空间中作为一个单元来管理。 podman run## 启动容器。podman start## 查看容器。podman ps## 终止容器。podman stop## 重启容器。podman restart## 进入容器。 podman attach## 导出容器。podman export## 导入容器快照。podman import## 删除容器。podman rm## 查看日志。
apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3
OCI 的影响 OCI 的成立和发展对容器技术生态系统有着深远的影响。通过定义开放的标准,OCI 促进了容器技术的互操作性和兼容性,使得开发者和运维人员可以更方便地使用和管理容器化应用。 停止(Stop):停止运行中的容器。 删除(Delete):删除容器及其所有资源。 3. 操作接口 OCI运行时规范定义了一组标准的操作接口,用于管理容器的生命周期。 GitHub:podman[3] 特点:podman 支持 OCI 规范,提供了无守护进程的容器管理功能,并支持无 root 权限运行容器。 4. OCI 的目标是定义容器镜像和运行时的开放标准,以确保不同平台和工具之间的兼容性和互操作性。 3. 标准化:OCI 通过提供开放的标准,促进了容器技术的广泛应用和发展,帮助开发者和运维人员更好地管理和运行容器化应用。
crontab -e 编辑任务计划 crontab -l(小写的L) 列出任务计划 crontab -r 删除 crontab -u [username] 指定某个用户 1-5 表示范围1到5 1,2,3 --level 34 network off/on 控制network的等级3和4开关 --add [servicename] 增加一行服务,前提是在/etc/init.d/目录下有文件 --del [
)查看IP($1代表IP) #cat access_log | awk '{print $1}' (2)对IP排序 #cat access_log | awk '{print $1}'| sort (3) awk '{print $1}'|uniq -c|wc -l > ip.txt (13)查看 access.Log 文件ip统计(从高到低) cat access.log |awk '{print $3} (3) 端口不通时发送邮件 # vim /scripts/ncports.sh #! /bin/bash #denyhost ip cat /var/log/secure|egrep -i -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3 > $fileRfc done tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt} 补充一些知识: Linux运维常见系统服务介绍
VIC由三个开源项目组成,分别是容器引擎VIC-engine,容器镜像仓库 Harbor registry 和容器管理门户 Admiral 。 这些问题在虚拟化时代都已经很好地解决过了,这回换上了更“先进”的容器,运维人员却失望地发现必须再次解决这些问题,犹如踏破铁鞋,又回到了原点,要辛辛苦苦地重造轮子。这就是容器应用目前的尴尬! 容器的落地问题,关键在于解决各种生产系统中部署(day 1)和运维(day 2)问题。 VIC真正把开发人员喜爱的Docker API和运维人员熟悉的vSphere管理工具完美地集成起来,成为开发运维一体化平台。 参见《玩转容器镜像-镜像仓库的管理和运维》。
Topic的消费kafka-console-consumer.sh 3. 持续批量推送消息kafka-verifiable-producer.sh 4. 持续批量拉取消息kafka-verifiable-consumer More 日常运维 、问题排查 怎么能够少了滴滴开源的 滴滴开源LogiKM一站式Kafka监控与管控平台 1.Topic的发送 默认值) –max-partition-memory-bytes Long 为分区分配的缓冲区大小 16384 –message-send-max-retries Integer 最大的重试发送次数 3 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --whitelist ‘.*’ --from-beginning 3. kafka.tools.LoggingMessageFormatter、kafka.tools.NoOpMessageFormatter、kafka.tools.ChecksumMessageFormatter 3.
3. 手动部署 按照社区官方提供的文档,可以使用手动方式部署单节点、多节点、HA 节点环境。 4. Puppet Puppet 由 Ruby 语言编写。 它基于 Python 开发,集合了众多运维工具(Puppet、Chef、SaltStack 等)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 升级只需要三步:拉取新版本的容器镜像,停止老版本的容器服务,启动新版本的容器。回滚也不需要重新安装包,直接启动老版本的容器服务就行,非常方便。 基于 Docker 容器部署和运维的 OpenStack 架构,如下图所示: ? kolla-ansible deploy -i /home/multinode -vvvv (3)安装结束后,创建环境变量文件。
Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。 除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。 - name: xxx # 容器名 image: xxxx # 容器镜像 status:# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义 命令创建Pod模板 在不知道模板该如何编写时 namespace: default type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: eyJhdXRocyI6eyJoYXJib3Iub2QuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IkhhcmJvcjEyMzQ1IiwiYXV0aCI6IllXUnRhVzQ2U0dGeVltOXlNVEl6TkRVPSJ9fX0
一、容器转化为镜像(docker export、docker import) 1)docker export:表示将容器导出文件包 两种命令方式(finhub-cms为容器名): docker export 可以基于这个新镜像创建容器,实现容器迁移。 另种命令方式: docker import finhub-cms.tar finhub-cms:v1 cat finhub-cms.tar | docker import - finhub-cms:v1 3) docker commit:也可以实现将容器转化为镜像。 这是因为docker export导出的容器包 丢失了历史和元数据metadata。
,会跟着自动创建一个veth虚拟接口,好比是容器接了一条网线到这个veth虚拟接口,并且通过veth虚拟接口和docker0进行通信,veth会随着的容器的启动而自动增加,也会随着容器的销毁而自动销毁, 每个容器都会有各自的veth。 8081:80 --name web02 -h web02 -v /data/webdata:/usr/share/nginx/html nginx092f185073eb5834097fe0d1c4ada3a65b6016e5ad717f1471927ed6c351afec packets 32 bytes 2592 (2.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0veth3a0e879 ,也会随着容器的销毁而销毁,每个容器都会有各自的veth。
HTTPGetAction:向容器指定 URL 发起 HTTP GET 请求,响应码为2xx或者是3xx为成功,否则失败。 Pod终止过程。 默认为3.最小值为1) successThreshold【健康伐值】:探测器失败后检查成功的最小连续成功次数。默认为1.活跃度必须为1。最小值为1。即监测路径健康后完成本次检查。 failureThreshold: 3 # 失败阈值,连续几次失败才算真失败。 nginx-deployment-dc75ffbf4-brxmp 1/1 Running 0 3m55s nginx-deployment-dc75ffbf4-k4mkb 1/1 Running 0 3m55s operator支持两个选项Equal和Exists,Equal用与匹配对应的value也是默认的操作符,Exists用来匹配污点的
dd if=infile.log of=outfile.log bs=1M count=1