使用 Dockerfile 定制镜像
一、使用 Dockerfile 定制镜像1.1、Dockerfile 定制镜像镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
以 nginx 镜像为例,这次我们使用 Dockerfile 来定制。
在一个空白目录中,建立一个文本文件,并命名为 Dockerfile:
123mkdir mynginxcd mynginxtouch Dockerfile
其内容为:
12FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
这个 Dockerfile 很简单,一共就两行。涉及到了两条指令, ...
kubelet垃圾回收机制
一、Tips
Kubernetes的垃圾回收由kubelet进行管理,每分钟会查询清理一次容器,每五分钟查询清理一次镜像。在kubelet刚启动时并不会立即进行GC,即第一次进行容器回收为kubelet启动一分钟后,第一次进行镜像回收为kubelet启动五分钟后。
不推荐使用其它管理工具或手工进行容器和镜像的清理,因为kubelet需要通过容器来判断pod的运行状态,如果使用其它方式清除容器有可能影响kubelet的正常工作。
镜像的回收针对node结点上由docker管理的所有镜像,无论该镜像是否是在创建pod时pull的。而容器的回收策略只应用于通过kubelet管理的容器。
Kubernetes通过kubelet集成的cadvisor进行镜像的回收,有两个参数可以设置:--image-gc-high-threshold和--image-gc-low-threshold。当用于存储镜像的磁盘使用率达到百分之–image-gc-high-threshold时将触发镜像回收,删除最近最久未使用(LRU,Least Recently Used)的镜像直到磁盘使用率降为百分之--image ...
kubelet源码执行流程分析
k8s学习:kubelet源码执行流程分析容器技术应用范围越来越广,通过理解整个框架的执行流程,学习源码执行思路,对以后的编程很有帮助, kubernetes有很多组件,我们今天通过kubelet这个组件来进行深入的分析,来看看里面的执行流程,kubelet里面涉及的方法非常多且层层嵌套,通过我这一篇文章肯定是讲不全的,大家可以根据自己的情况不断深入来学习。我们这篇文章主要分析其执行流程,不深入底层的执行细节。抓主干。学习源码版本:1.19
kubelet 主要功能在kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器,并负责健康检查和监控信息提供。
pod 管理每个pod都有其对应的yaml文件,来描述其运行过程中的一些参数和配置信息,kubelet 采用一组通过各种机制来保证运行在此物理机上的容器,符合 PodSpecs 中描述的 Pod 状态,正常健康运行。
官方提供了4中方式来获取容器信息:
apiserver:通过 API Server 监听 etcd 目录获取数据;
File:启动参数 ...
Helm进阶使用
一、概述Helm 针对 Kubernetes 的 Helm 包管理器。Helm 的一般操作:
12345678910# 搜索 charthelm search: # 下载 chart 到本地目录查看helm pull: # 上传 chart 到 Kuberneteshelm install: # 列出已发布的 charthelm list: # 查看帮助helm --help
官方文档:https://helm.sh/zh/docs/helm/helm/Helm 架构和基础语法讲解可以参考这篇文章
二、Helm 仓库(helm repo)
添加、列出、删除、更新和索引 chart 仓库。
1)添加 chart 仓库1helm repo add bitnami https://charts.bitnami.com/bitnami
2)列出已添加的仓库1helm repo list
3)从 chart 仓库中更新本地可用 chart 的信息1helm repo update bitnami
4)删除一个或多个仓库1helm repo remove bitnami
...
Helm基础使用及语法
一、概述
我们可以将 Helm 看作 Kubernetes 下的 apt-get/yum。Helm 是 kubernetes 的包管理器,helm 仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如 hub.docker.com、私有仓库。
官方文档:
https://v3.helm.sh/zh/docs/
二、Helm 架构
三、Helm 安装下载地址:
https://github.com/helm/helm/releases
123456789# 下载包$ wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz# 解压压缩包$ tar -xf helm-v3.9.4-linux-amd64.tar.gz# 制作软连接$ ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm# 验证$ helm version$ helm help
四、Helm 组件及相关术语
Helm——Helm 是一个命令行下的客户端工具。主要用于 Kuberne ...
二进制部署一套完整的企业级K8s集群
v1.22**,二进制方式**
说明
该文档有导航窗格,方便阅读,如果左侧没有显示,请检查word是否启用。 文档中涉及涉及文件都下载好了,如果有需要可私信阿良获取最新包。 转载请注明作者,拒绝不道德行为!
一键部署脚本
https://github.com/lizhenliang/ansible-install-k8s
最后更新时间
2021-11-25
一、前置知识点1.1 生产环境部署K8s集群的两种方式• kubeadm
Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
• 二进制包
从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
小结:Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
1.2 准备环境服务器要求:
• 建议最小硬件配置:2核CPU、2G内存、30G ...
etcd 备份还原
containerdetcd 备份还原还原每台的master节点 IP 和主机名需要修改停止集群mv /etc/kubernetes/manifests.bak
备份原有etcd数据mv /u01/local/kube-system/etcd /u01/local/kube-system/etcd-date '+%Y%m%d-%H:%M:%S'
还原第一台master1234567891011121314151617nerdctl -n k8s.io run --rm \-v '/tmp\:/tmp' \-v '/u01/local/kube-system:/u01/local/kube-system' \-v '/etc/kubernetes/pki/etcd:/etc/kubernetes/pki/etcd' \--env ETCDCTL\_API=3 \'docker.kedac ...
ETCD使用中需要注意的问题
ETCD使用中需要注意的问题我们在实际生产中使用ETCD存储元数据, 起初集群规模不大的时候元数据信息不多没有发现什么问题。 随着集群规模越来越大问题逐渐暴露了
有些实际的配置还是需要在初始化的时候就研究确定
1. 自动压缩--auto-compaction-retention
由于ETCD数据存储多版本数据,随着写入的主键增加历史版本需要定时清理, 默认的历史数据是不会清理的,数据达到2G就不能写入,必须要清理压缩历史数据才能继续写入;
所以根据业务需求,在上生产环境之前就提前确定,历史数据多长时间压缩一次; 我们的生产环境现在升级后是默认一小时压缩一次数据。这样可以极大的保证集群稳定,减少内存和磁盘占用
2. 最大字节数--max-request-bytesetcd Raft消息最大字节数,ETCD默认该值为1.5M; 但是很多业务场景发现同步数据的时候1.5M完全没法满足要求,所以提前确定初始值很重要; 由于1.5M导致我们线上的业务无法写入元数据的问题,
我们紧急升级之后把该值修改为默认32M,但是官方推荐的是10M(10485760byts),大家可以根据业务情况自己调整
...
Kubernetes入门教程
第一章 kubernetes介绍本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。
应用部署方式演变在部署应用程序的方式上,主要经历了三个时代:
传统部署:互联网早期,会直接将应用程序部署在物理机上
优点:简单,不需要其它技术的参与
缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响
虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境
优点:程序环境不会相互产生影响,提供了一定程度的安全性
缺点:增加了操作系统,浪费了部分资源
容器化部署:与虚拟化类似,但是共享了操作系统
优点:
可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等
运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦
容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署
容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:
一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
当并发访问量变大的时候,怎么样做到横向扩展容器数量
这些容器管理 ...
Kubernetes 的 hostNetwork 和 NetworkPolicy (网络策略)
1. hostNetwork 介绍
在 k8s 中,若 pod 使用主机网络,也就是hostNetwork=true。则该pod会使用主机的dns以及所有网络配置,默认情况下是无法使用 k8s 自带的 dns 解析服务,但是可以修改 DNS 策略或者修改主机上的域名解析(/etc/resolv.conf),使主机可以用 k8s 自身的 dns 服务。一般通过 DNS 策略(ClusterFirstWithHostNet)来使用 k8s DNS 内部域名解析,k8s DNS 策略如下:
Default:继承 Pod 所在宿主机的 DNS 设置,hostNetwork 的默认策略。
ClusterFirst(默认DNS策略):优先使用 kubernetes 环境的 dns 服务,将无法解析的域名转发到从宿主机继承的 dns 服务器。
ClusterFirstWithHostNet:和 ClusterFirst 类似,对于以 hostNetwork 模式运行的 Pod 应明确知道使用该策略。也是可以同时解析内部和外部的域名。
None:忽略 kubernetes 环境的 dns 配置,通 ...