Docker & K8S
文章平均质量分 82
k8s, docker, containerd
GottdesKrieges
Oracle、OceanBase、TiDB、达梦数据库认证专家。 GBase数据库认证工程师。K8S云原生认证工程师。ITIL服务管理和PMP项目管理认证。
展开
-
快速部署docker-compose环境
📖参考:https://docs.docker.com/compose/install/standalone/原创 2024-03-27 19:24:43 · 339 阅读 · 0 评论 -
kubelet升级到v1.24版本后服务拉起失败
k8s集群从1.23版本升级到1.24版本,升级完kubelet组件后,发现kubelet systemd服务拉起失败。修改下面的配置文件,去掉。原创 2023-03-18 15:32:30 · 625 阅读 · 0 评论 -
K8S容器运行时从Docker切换为Containerd
K8S从1.24版本起不再支持docker容器引擎,可选的替代品有containerdcri-opodman。下面演示将单个node节点的容器引擎从docker切换为containerd的过程。原创 2023-03-18 15:23:52 · 1839 阅读 · 0 评论 -
k8s多master节点集群搭建
命令之前的所有环境配置工作(操作系统参数、网络配置、镜像仓库、yum源等)。无需单独在这些后续加入的master节点上安装k8s网络插件。在还未加入集群的master节点上执行上面打印出来的命令来加入集群,注意加上。参照集群中的第一个master节点,对后续要加入集群的master节点做好。修改对应的操作系统参数,再重新加入master节点即可。首先搭建一个单master节点的集群,具体可以参考博文。最后检查加入集群的master节点状态是否READY。来表明是以管理节点的身份加入。原创 2023-03-15 22:17:12 · 1587 阅读 · 1 评论 -
使用kubeadm升级k8s集群
升级k8s集群的方式取决于集群的部署方式、以及后续更改它的方式。原创 2023-03-12 18:36:15 · 631 阅读 · 0 评论 -
Kubernetes之etcd数据库备份与恢复
etcdctl 3.3的默认API版本为2,与版本3的差别较大。在命令前加上来调用版本3接口。原创 2023-03-12 14:33:26 · 352 阅读 · 0 评论 -
基于RBAC的k8s服务账号授权示例
服务账号(ServiceAccount)是Kubernetes API所管理的用户。它们被绑定到特定的名字空间,或者由API服务器自动创建,或者通过API调用创建。服务账号与一组以Secret保存的凭据相关,这些凭据会被挂载到Pod中,从而允许集群内的进程访问Kubernetes API。原创 2023-01-02 01:00:00 · 546 阅读 · 0 评论 -
基于RBAC的k8s用户授权示例
的资源属于核心API组。Service与Pod同属于核心API组。可以看出,mckinsey用户对Pod资源有读权限,对其他资源(例如Deployment)没有读权限。中的server,就可以通过mckinsey用户的权限来访问Kubernetes集群资源。目前mckinsey用户对Pod只有读权限。为mckinsey用户创建并绑定RBAC权限策略,这里仅授予对Pod的读权限。RoleBinding可以将Role中定义的权限赋予一个用户或者一组用户。则用于生成用户mckinsey的CA证书签名请求,其中。原创 2023-01-01 16:57:07 · 737 阅读 · 0 评论 -
Kubernetes API访问控制:使用RBAC鉴权
基于角色的访问控制(Role-Based Access Control, RBAC)是一种基于组织中用户的角色来调节控制对计算机或网络资源的访问的方法。RBAC鉴权机制使用rbac.authorization.k8s.io API组来驱动鉴权决定,允许通过Kubernetes API动态配置策略。要启用RBAC,在启动API服务器时将参数设置为一个逗号分隔的列表并确保其中包含RBAC。翻译 2022-12-28 17:24:06 · 64 阅读 · 0 评论 -
Kubernetes API访问控制:鉴权
将请求验证为来自特定的用户后,请求必须被鉴权(Authorization)。请求必须包含请求者的用户名、请求的行为以及受该操作影响的对象。如果现有策略声明用户有权完成请求的操作,那么该请求被鉴权通过。Kubernetes支持多种鉴权模块,例如ABAC模式、RBAC模式和Webhook模式等。管理员创建集群时,他们配置应在API服务器中使用的鉴权模块。如果配置了多个鉴权模块,则;如果所有模块拒绝了该请求,请求将会被拒绝(HTTP状态码)。翻译 2022-12-27 18:19:34 · 76 阅读 · 0 评论 -
Kubernetes API访问控制:用户认证
k8s安全控制框架主要由下面三个阶段控制。每一个阶段都支持插件方式,通过API Server配置来启用插件。建立TLS后,HTTP请求将进入认证步骤。集群创建脚本或者集群管理员配置API服务器,使之运行一个或多个身份认证组件。认证步骤的输入整个HTTP请求;但是,通常组件只检查。认证模块包含客户端证书、密码、普通令牌、引导令牌和JSON Web令牌(JWT,用于服务账户)。可以指定多个认证模块,在这种情况下,服务器依次尝试每个验证模块,。如果请求认证不通过,服务器将以HTTP状态码拒绝该请求。翻译 2022-12-27 15:33:52 · 107 阅读 · 0 评论 -
k8s敏感数据存储:Secret
此外,任何有权限在命名空间中创建Pod的人都可以读取该命名空间中的任何Secret,包括间接访问,例如创建Deployment。默认情况下,所引用的Secret都是必需的。如果Pod引用了Secret中的特定主键,而虽然Secret本身存在,对应的主键不存在,Pod启动也会失败。字段来填充环境变量的Secret而言,如果其中包含的Key不能被当做合法的环境变量名,这些主键会被忽略掉。当卷中包含来自Secret的数据,而对应的Secret被更新,Kubernetes会跟踪到这一操作并更新卷中的数据。原创 2022-11-05 14:58:48 · 1397 阅读 · 0 评论 -
k8s配置文件数据存储:ConfigMap
下面的文件定义了一个ConfigMap,其中包含了两种键值对数据:类属性键和类文件键。apiVersion : v1 kind : ConfigMap metadata : name : game - demo data : # 类属性键;原创 2022-11-03 19:02:47 · 2396 阅读 · 0 评论 -
StatefulSet:有状态应用部署
StatefulSet与Deployment控制器的主要区别在于:使用StatefulSet部署的Pod是有身份的,主要体现在主机名、稳定的网络标识、稳定的PV存储这三个方面。对于具有N个副本的StatefulSet,该StatefulSet中的每个Pod将被分配一个从0到N-1的整数序号,该序号在此StatefulSet中是唯一的。恢复模板后,还必须删除StatefulSet曾经尝试使用错误的配置来运行的Pod,以便StatefulSet能够使用修改后的正确模板来重新创建Pod。原创 2022-11-02 22:53:39 · 952 阅读 · 0 评论 -
k8s存储:卷、持久卷、存储类
常用的数据卷原创 2022-08-13 18:28:26 · 3032 阅读 · 0 评论 -
Ingress:比Service更强大的服务暴露与负载均衡
根据OSI七层模型:负载均衡可以分为4层LB和7层LB两种类型:使用Service NodePort对外暴露服务存在的不足:Ingress是k8s中的一个抽象资源,提供了一个暴露应用的入口定义方法。Ingress控制器会提供一个统一的访问入口,通常是80端口(HTTP)或者443端口(HTTPS)。Ingress Controller负责路由流量,根据Ingress生成具体的路由规则,并对Pod负载均衡。Ingress控制器管理的负载均衡器,为集群提供全局的负载均衡能力。查看k8s版本:下载对应版本兼容的原创 2022-08-08 00:11:04 · 2543 阅读 · 0 评论 -
Service:服务发现与负载均衡
方法一:为已有的deployment创建service。方法二:直接创建Service。对于某些服务,需要公开多个端口。相应地,Service也要配置多个端口定义,通过端口名称区分。原创 2022-08-06 10:50:39 · 617 阅读 · 1 评论 -
Pod调度策略:亲和性、污点与污点容忍
基于节点标签分配是站在Pod的角度上,通过在Pod上添加属性,来确定Pod是否要调度到指定的节点上。相反地,我们也可以在Node节点上添加污点属性(Taints),来避免Pod被分配到不合适的节点上。nodeSelector用于将Pod调度到匹配Label的节点上,如果没有匹配的标签会调度失败。节点亲和性,类似于nodeSelector,可以根据节点上的标签来约束Pod可以调度到哪些节点。Taints和Tolerations匹配的原则是。......原创 2022-08-02 03:30:00 · 477 阅读 · 0 评论 -
静态Pod、Pod创建流程、容器资源限制
在K8S集群搭建好之前,只能通过上面的方式由kubelet创建静态Pod。k8s基于list-watch机制的控制器架构,实现组件间交互的解耦。其他组件监控自己负责的资源,当这些资源发生变化时,实际上,master节点的这四个组件都是由本节点kubelet直接管理的静态Pod部署。k8s会根据requests的值去寻找有足够可用资源的节点来调度Pod。由于创建一个单独的Pod时不会使用到控制器,所以上面的过程中没有涉及到。都是以master节点的名称结束的,并且没有对应的控制器。Node节点部署的组件有。.原创 2022-08-01 03:00:00 · 519 阅读 · 0 评论 -
Pod环境变量和initContainer
Pod中会有这几类容器。原创 2022-07-31 18:05:51 · 1274 阅读 · 0 评论 -
Deployment应用生命周期与Pod健康检查
维护Pod的副本数量。RS会不断对比当前Pod的数量与期望的Pod数量。此时的Pod不属于任何一个Deployment,也没有对应的ReplicaSet,因此被删除后不会再自动生成一个新的。通过在Pod中定义专门容器,来执行主业务容器需要的辅助工作,这种部署Pod的方法被称为。如果我们直接删除Deployment中的一个Pod,RS会生成一个新的Pod,以达到期望的Pod数量。Pod是K8S创建和管理的最小单元,由一个或多个容器组成。Pod中的容器始终位于同一个Node上,不会跨Node。...原创 2022-07-31 00:30:18 · 541 阅读 · 0 评论 -
k8s yaml文件编写技巧
在日常运维中,从零开始写一个yaml文件的效率太低,而且容易出错。一个很好的方法就是利用kubectl命令来自动生成部署用的yaml文件,然后根据需求进行修改即可。Service和Deployment通过。表示在本地尝试运行,但是不会实际部署。命令导出已有部署的yaml文件。查看Service关联的Pod。编写一个对外暴露服务文件。执行上面的yaml文件。执行上面的yaml文件。编写一个应用部署文件。...原创 2022-07-26 19:57:10 · 2042 阅读 · 0 评论 -
k8s部署metrics server资源监控及日志查看
如果状态为True且能够返回数据,说明MetricsServer运行正常。可以看到,本次部署失败了。结合上面的输出分析,应该是镜像拉取失败了,需要将yaml文件中的镜像下载地址替换为国内的镜像仓库地址。参数,告诉metricsserver不验证kubelet提供的https证书。kubelet组件使用systemd管理服务,查看日志的命令为。原因是我们下载的yaml文件是最新的,是基于。其他k8s组件采用容器部署,查看日志的命令为。写的,而镜像下载地址被手动改成了。的配置文件中需要的权限配置与。...原创 2022-07-25 00:42:24 · 2807 阅读 · 0 评论 -
K8s集群部署中的变化和注意事项
本文主要介绍部署过程中发生的一些新的变化、以及一些可能遇到问题的解决办法。原创 2022-07-24 15:19:21 · 554 阅读 · 0 评论 -
Helm包管理器
Helm包管理器Helm安装部署先决条件二进制安装脚本安装Helm初始化使用Chart发布应用版本使用官方的Chart创建自己的Chart变量引用、动态更新与回滚之前提到的应用部署流程主要包括:创建项目镜像、配置deployment控制器、以及通过Service和Ingress发布应用等几个重要步骤。对于较为复杂的项目,可能会需要配置很多的yaml文件,管理起来较为复杂。为了将这些yaml文件作为一个整体来管理,同时支持yaml文件的高效复用、以及应用级别的版本管理,就需要用到Kubernetes的包管理原创 2021-02-16 22:27:39 · 392 阅读 · 0 评论 -
Ingress对外发布应用
Ingress对外发布应用NodePort存在的问题Ingress对外暴露应用Pod与Ingress的关系Ingress Controller部署Ingress创建规则NodePort存在的问题通过Service的NodePort发布应用可能存在以下问题:端口冲突,每创建一个Service就会占用一个端口,因此需要做好端口的分配与管理;NodePort使用的是四层负载均衡(即传输层,通过IP+端口号转发流量),无法使用域名或URL进行转发;无法为集群内所有的应用/Pod做统一的代理(统一的访问入原创 2021-02-15 21:44:54 · 352 阅读 · 0 评论 -
Service统一入口访问应用
Service统一入口访问应用Service存在的意义Pod与Service的关系Service的类型使用NodePort对外暴露应用Service存在的意义Service的主要作用在于:防止Pod失联(服务发现,增删Pod都能感知到IP);定义一组Pod的访问策略(负载均衡);支持ClusterIP、NodePort以及LoadBalancer三种类型。Pod与Service的关系Service与Pod通过label-selector相关联。# svc.yamlapiVersion:原创 2021-02-14 20:32:53 · 440 阅读 · 0 评论 -
理解k8s的Deployment控制器
理解k8s的Deployment控制器Pod与控制器的关系Deployment的功能YAML字段解析使用Deployment部署无状态应用升级与回滚弹性伸缩Deployment与ReplicaSetPod与控制器的关系控制器(Controllers)是在集群上管理和运行容器的对象。控制器通过label-selector关联Pod。Pod通过控制器可以实现应用的运维,如伸缩、滚动升级等。Deployment的功能Deployment的功能包括:部署无状态应用;管理Pod和ReplicaSet;原创 2021-02-10 14:30:39 · 618 阅读 · 0 评论 -
理解Kubernetes中的Pod对象
理解Kubernetes中的Pod对象Pod存在的意义Pod实现机制网络共享存储共享Pod容器分类与设计模式Pod存在的意义Pod为亲密性应用而存在。亲密性应用场景包括:两个应用之间发生文件交互;两个应用需要通过127.0.0.1或者socket通信;两个应用需要发生频繁的调用。Pod实现机制同一个Pod中的容器共享网络和存储。网络共享同一个Pod里的容器共享网络命名空间(包括IP、端口号、MAC地址)。网络命名空间的信息存储在Infrastructure容器中(节点上自动生成的Pau转载 2021-02-09 16:22:34 · 195 阅读 · 0 评论 -
在k8s群集中部署Java应用
在k8s群集中部署Java应用项目迁移到k8s的流程构建项目镜像配置应用数据源编译应用war包打包项目镜像部署项目镜像到k8s控制器管理PodService暴露应用项目迁移到k8s的流程项目迁移到k8s的一般流程为:制作镜像、控制器管理Pod、暴露应用、对外发布应用、日志&监控。一般企业会用到的三种镜像有:基础镜像(OS)、运行环境镜像(基础镜像+JDK/PHP/Tomcat/Nginx等)、项目镜像(运行环境镜像+项目打包)。构建项目镜像假设有一个打包好的tomcat-java-demo原创 2021-02-08 15:47:27 · 484 阅读 · 0 评论 -
kubernetes群集部署与测试
kubernetes群集部署与测试基本概念Kubernetes部署Kubeadm部署安装要求环境准备(所有节点)安装docker和k8s组件(所有节点)部署master节点(master节点)安装Pod网络插件(master节点)Node加入集群(worker节点)部署Dashboard(master节点)测试k8s群集基本概念组件作用Pod最小部署单元; 一组容器的集合; 同一个Pod中的容器共享网络命名空间; Pod的生命周期是短暂的ControlersReplicaS原创 2021-02-08 15:26:56 · 642 阅读 · 1 评论 -
部署和使用Harbor镜像仓库
部署和使用Harbor镜像仓库Harbor概述组件与功能安装要求Harbor部署安装docker compose安装HarborHarbor配置与使用配置insecure registries创建Harbor用户并赋予角色推送和拉取镜像Harbor概述Harbor是由VMware开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用。这些新的企业级特性包括:管理用户界面、基于角色的访问控制、AD/LDAP集成及审计日志等。组件与功能原创 2021-02-03 14:39:37 · 523 阅读 · 0 评论 -
构建docker基础镜像并部署LNMP网站平台
构建基础docker镜像构建nginx基础镜像构建tomcat基础镜像构建php基础镜像编写dockerfile时,尽量使用&&连接shell命令。尽量少使用 RUN、COPY 和 ADD 指令,因为这三个指令每次使用都会在镜像中增加分层(layers),导致最终生成的镜像变大。使用其他指令生成的是临时过渡层,不会增加镜像的大小。构建nginx基础镜像# Dockerfile-nginx 写入以下内容FROM centos:7RUN yum install -y gcc gcc-c转载 2021-02-02 14:27:03 · 272 阅读 · 0 评论 -
Dockerfile的介绍与使用
Dockerfile的介绍与使用Dockerfile格式Dockerfile命令Build镜像Docker可以通过读取dockerfile自动构建(build)定制化镜像。Dockerfile格式Dockerfile包含若干行从上至下按顺序排列的指令。其格式为INSTRUCTION args。Dockerfile的内容必须以FROM指令开始(但是前面可以有parser directives语句、注释语句或者ARG指令)。# directive=value # parser directive,非注原创 2021-02-01 15:39:06 · 206 阅读 · 0 评论 -
docker容器的网络访问
docker容器的网络访问网络访问模式Bridge networksHost networkingOverlay networksMacvlan networksNone: Disable networking网络测试网络访问原理网络访问模式容器的子网络基于驱动,是可插拔的(pluggable)。默认情况下,存在以下几种驱动程序,它们提供核心的联网功能:Bridge:网桥(bridge)是默认的网络驱动。当应用程序在单机模式(standalone)的容器中运行且需要通信时,通常会使用网桥驱动。Ho原创 2021-01-30 21:55:14 · 1760 阅读 · 0 评论 -
docker容器数据的持久化
docker容器数据的持久化容器的数据存储方法概览Volume创建和管理卷创建容器并挂载卷移除容器和卷Bind Mounts创建容器并绑定挂载卷绑定挂载非空目录移除容器和卷Volumes vs Bind Mounts在容器内创建的所有文件默认被存储在一个容器可写层(writable container layer),也就是意味着:当容器被删除时其内部的数据不会被持久化(persist),且容器外的进程也难以获取容器内部的数据;容器的可写层与容器运行所在的宿主机紧密耦合,容器内部的数据很难迁移到其他机原创 2021-01-29 14:05:54 · 962 阅读 · 1 评论 -
docker容器常用命令与示例
docker容器常用命令与示例管理镜像常用命令创建容器常用选项容器资源限制管理容器的常用命令管理镜像常用命令指令描述docker image ls列出镜像docker image build从dockerfile构建镜像docker image history 或 docker history查看给定镜像的历史docker image inspect 或 docker inspect显示镜像的详细信息docker image pull 或 docker转载 2021-01-28 16:10:51 · 169 阅读 · 0 评论 -
安装docker-ce
Docker-ce安装(CentOS7)准备工作卸载旧版本通过docker repository安装创建repository安装docker engine创建容器测试升级docker engine卸载docker engine准备工作对于CentOS操作系统,要求其版本必须为CentOS7或者CentOS8。安装前需要关闭防火墙和selinux。$ systemctl stop firewalld && systemctl disable fiewalld$ sed -i ‘s/en原创 2021-01-27 10:27:35 · 332 阅读 · 0 评论 -
k8s单master节点集群搭建:使用kubeadm
k8s单master节点集群搭建:使用kubeadm架构环境准备(所有节点)配置网卡和静态IP关闭防火墙关闭selinux关闭swap配置主机名修改hosts文件使用iptables控制网络流量时间同步安装docker和k8s组件(所有节点)安装docker添加阿里云yum源安装kubeadm/kubelet/kubectlMaster节点部署Node节点部署部署CNI网络插件k8s群集测试架构Kubernetes单master群集仅包含一个master节点和三个node节点(或者worker节点)。条原创 2021-01-22 08:56:20 · 684 阅读 · 0 评论 -
Kubernetes基础概念
Kubernetes基础概念Kubernetes是什么Kubernetes能做什么Kubernetes不能做什么基本概念Pod控制平面(control plane)节点(node)控制器(controller)容器(container)工作负载(Workload)服务(service)命名空间(Namespace)DaemonSetDeploymentKubernetes 组件控制平面组件Node组件插件(Addons)Kubernetes是什么Kubernetes (k8s)是一个可移植的(porta转载 2021-01-14 16:07:18 · 224 阅读 · 0 评论