K8s与容器系列
文章平均质量分 58
整理这些年在k8s与容器上的使用经验,希望对大家有所帮助
平凡似水的人生
人的梦想是不会被终结的
展开
-
kubernetes基于Coredns来设置自定义域名
问题描述由于我们的私有镜像仓库域名是自定义的,所以出现在pod中无法解析的问题,如下图所示,如何解决这个问题那? 我们可以基于coredns来配置自定义域名,下面给大家演示一下如何做的基于Coredns配置自定义域名1、修改coredns配置kubectl edit cm coredns -n kube-system#添加以下内容hosts { 10.99.115.9 core.harbor.domain fallthrough}保存退出,过一会儿自动就自动生效了。2、在原创 2022-04-14 16:34:27 · 2226 阅读 · 0 评论 -
containerd拉取私有仓库镜像报错x509: certificate signed by unknown authority
报错原因分析私有仓库使用的是harbor,由于harbor连接默认需要https认证,crictl拉取镜像默认不带证书访问,所以会报错解决#下载证书并放到指定目录,证书如何下载看下图mkdir /etc/containerd/core.harbor.domaincp ca.crt /etc/containerd/core.harbor.domain/修改containerd配置文件vim /etc/containerd/config.toml#配置endpoint连接地址[p原创 2022-04-13 22:16:46 · 10832 阅读 · 1 评论 -
Helm上传chart包到harbor
前言harbor自带helm私有仓库的功能,不需要再部署一个helm私有仓库,在这里给大家介绍一下helm如何上传chart包到harbor安装插件下载helm-push包wget https://github.com/chartmuseum/helm-push/releases/download/v0.10.2/helm-push_0.10.2_linux_amd64.tar.gz查看helm的plugin路径helm env拷贝插件到指定目录cd /root/.local/sh原创 2022-04-12 18:08:22 · 2847 阅读 · 0 评论 -
Kubernetes CICD系列之Jenkins Blue Ocean插件
前言给大家介绍一下Jenkins Blue Ocean插件,它可以支持以可视化的方式创建流水线。Blue Ocean插件的特性持续交付(CD)Pipeline的复杂可视化 ,可以快速直观地理解管道状态。pipeline编辑器: 引导用户通过直观的、可视化的过程来创建Pipeline,从而使Pipeline的创建变得更加容器。个性化: 以适应团队中每个成员不同角色的需求。在需要干预或出现问题时精确定位,Blue Ocean展示Pipeline中需要关注的地方,简化异常处理,提高生产力。配原创 2022-04-12 16:08:24 · 738 阅读 · 0 评论 -
Kubernetes使用流量管理平台Istio(五)
基于Istio的授权每个envoy代理都运行一个授权引擎,该引擎在运行时授权请求。当请求到达代理时,授权引擎根据当前授权策略评估请求上下文,并返回授权结果ALLOW或DENY。授权策略支持ALLOW或DENY动作,拒绝策略优先于允许策略。如果将任何允许策略应用于工作负载,则默认情况下,不符合该策略的访问都将被禁止。授权策略selector字段指定策略的目标action字段指定允许还是拒绝请求rules指定何时触发动作rules下的from字段指定请求的来源rules下的to字段指原创 2022-04-08 21:46:02 · 619 阅读 · 0 评论 -
Kubernetes使用流量管理平台Istio(四)
基于Istio的认证Istio通过客户端和服务器端Policy Enforcement Points(PEPS)建立服务到服务的通信通道,PEPS在istio架构中的实现是envoy。Peer authentication:用于服务到服务的认证,一验证进行连接的客户端。istio提供双向TLS作为传输认证的全栈解决方案,无需更改服务代码就可以启用它。这个解决方案为:为每个服务提供强大的身份,表示其角色,以实现跨集群和云的互操作性。保护服务到服务的通信提供密钥管理系统,以自动进行密钥和证书原创 2022-04-07 22:58:41 · 1087 阅读 · 0 评论 -
Kubernetes使用流量管理平台Istio(三)
微服务架构下的安全挑战为了抵御中间人攻击,需要流量加密。为了提供灵活的服务访问控制,需要双向TLS和细粒度的访问策略。要确定谁在什么时候做了什么,需要审计工具。Istio的安全保证Istio安全功能提供:身份识别灵活策略透明的TLS加密认证,授权和审计(AAA)工具来保护你的服务和数据Istio安全的目标是:默认安全: 应用程序代码和基础设施无需更改深度防御: 与现有安全系统集成以提供多层防御零信任网络: 在不受信任的网络上构建安全解决方案高层架构用于密钥和证书管理的原创 2022-04-07 21:21:51 · 290 阅读 · 0 评论 -
Kubernetes使用流量管理平台Istio(二)
流量管理请求路由特定网格中服务的规范表示由Pilot维护。服务的istio模型和在底层平台(Kubernetes、mesos以及cloud foundry等)中的表达无关。特定平台的适配器负责从各自平台中获取元数据的各种字段,然后对服务模型进行填充。istio引入了服务版本的概念,可以通过版本(v1、v2)或环境(staging、prod)对服务进行进一步的细分。这些版本不一定是不同的API版本: 它们可能是部署在不同环境(prod、staging或者dev等)中的同一服务的不同迭代。使用这种方式的原创 2022-04-06 22:02:02 · 1086 阅读 · 0 评论 -
kubernetes通过helm安装kube-prometheus-stack
一、部署1、配置helm仓库helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo update2、安装prometheushelm -n prometheus-stack install kube-prometheus-stack prometheus-community/kube-prometheus-stac3、查看prometheus版本kub原创 2022-04-06 17:36:34 · 2321 阅读 · 2 评论 -
Kubernetes使用流量管理平台Istio(一)
什么是服务网格?服务网格(Service Mesh)这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。随着规模和复杂性的增常,服务网格越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如A/B测试、金丝雀发布、限流、访问控制和端到端认证等。为什么要使用Istio?HTTP、gRPC、WebSocket和TCP流量的自动负载均衡通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。可插入的策略层和原创 2022-04-05 14:03:15 · 1368 阅读 · 0 评论 -
containerd使用ctr导入镜像成功,crictl为何查询不到?
1、使用ctr导入镜像ctr image import dashboard.tar#查询镜像,为什么没有刚才导入的镜像?crictl images2、原因分析ctr是containerd自带的工具,有命名空间的概念,若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io#使用ctr命令指定命名空间导入镜像ctr -n=k8s.io image import dashboard.tar#查看镜像,可以看到可以查询到了crictl i原创 2022-04-02 22:01:42 · 12225 阅读 · 2 评论 -
Kubernetes使用loki+prometheus+grafana实现日志收集与分析
日志收集系统Lokigrafana loki 是可以组成功能齐全的日志记录堆栈的一组组件与其他日志记录系统不同,Loki是基于仅索引有关日志的元数据的想法而构建的: 标签。日志数据本身被压缩并存储在对象存储(例如s3或GCS)中的块中,甚至存储在文件系统本地。小索引和高度压缩的块简化了操作,并大大降低了Loki的成本。基于Loki的日志收集系统Loki- stack子系统Promtail将容器日志发送到loki或者grafana服务上的日志收集工具发现采集目标以及给日志流添加上原创 2022-03-11 17:50:44 · 4097 阅读 · 1 评论 -
Kubernetes CICD系列之tekton工具使用
前言Tekton是一种适用于创建持续集成和持续部署/交付(CI/CD)系统的谷歌开源的Kubernetes原生框架,它支持多云/多集群下进行搭建、测试和部署,可实现滚动部署、蓝/绿部署、金丝雀部署或 GitOps 工作流等高级部署。Jenkins的不足基于脚本的job配置复用率不足代码调试困难基于声明式API的流水线-Tekton自定义可重用可扩展性标准化规模化支持Tekton 核心组件pipline: 对象定义了一个流水线作业,一个pipeline对象由一个或数个ta原创 2022-03-11 15:25:42 · 2544 阅读 · 0 评论 -
Kubernetes声明式持续交付工具argocd
前言Argo CD是用于Kubernetes的声明性GitOps连续交付工具。为什么选择 Argo CD?应用程序定义,配置和环境应为声明性的,并受版本控制应用程序部署和生命周期管理应该是自动化的,可审核的且易于理解的架构图一、安装argo1、创建命名空间kubectl create namespace argocd2、安装kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd原创 2022-03-10 22:56:56 · 707 阅读 · 0 评论 -
Kubernetes CICD系列之Jenkins使用
前言Jenkins是业内比较常用CICD工具,所以先在这里给大家介绍如何在Kubernetes中使用Jenkins来做CICD.流程图一、部署Jenkins1、创建Jenkins podkubectl apply -f jenkins.yaml kubectl apply -f sa.yaml安装成功2、查看Jenkins初始密码kubectl logs jenkins-0 3、登陆Jenkins查看登陆端口http://192.168.0.61:30854/4、配原创 2022-03-09 22:06:08 · 1113 阅读 · 0 评论 -
Kubernetes安装镜像仓库harbor
前言harbor是vmware开源的企业级镜像仓库,目前是CNCF的毕业项目。它拥有完整的仓库管理、镜像管理、基于角色的权限控制、镜像安全扫描集成、镜像签名等。1、使用helm下载harborhelm repo add harbor https://helm.goharbor.iohelm fetch harbor/harbor --untar#创建harbor namespacekubectl create ns harbor2、修改harbor配置vim harbor/val原创 2022-03-08 23:28:30 · 1132 阅读 · 0 评论 -
kubespray部署Kubernetes高可用集群
前言kubespray基于ansible-playbook完成集群部署,可以自动完成操作系统层面配置,利用了kubeadm作为集群管理工具,这里介绍一下是如何使用的。实验环境本机mac 部署节点192.168.0.61 k8s-master192.168.0.62 k8s-master192.168.0.63 k8s-node一、环境准备1、安装docker#需要在每个节点上安装dockerapt install docker.io2、配置docker c原创 2022-03-05 19:33:09 · 1005 阅读 · 0 评论 -
使用kubeadm搭建Kubernetes高可用集群
一、环境配置1、关闭swapswapoff -avi /etc/fstabremove the line with swap keyword2、配置系统参数cat <<EOF | sudo tee /etc/modules-load.d/k8s.confbr_netfilterEOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bri原创 2022-03-04 00:01:27 · 652 阅读 · 1 评论 -
Kubernetes基于extended-resource扩展资源
前言扩展资源是Kubernetes.io域名之外的标准资源名称。它们使得集群管理员能够颁布非Kubernetes内置资源,而用户可以使用它们,下面介绍节点级扩展资源的用法。节点级扩展资源1、生成证书cat ~/.kube/config #生成admin.crtecho LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJTzZiVHJEM1FLWWd3RFFZSktvWklodmNOQVFFTEJRQXdGVEV原创 2022-03-02 22:38:35 · 961 阅读 · 0 评论 -
kubernetes基于node-problem-detector实现异常节点检测
Kubernetes集群可能存在的问题基础架构守护程序问题: NTP服务关闭硬件问题:CPU,内存或磁盘损坏 内核问题:内核死锁,文件系统损坏容器运行时问题:运行时守护程序无响应…当Kubernetes中节点发生上述问题,在整个集群中,k8s服务组件并不会感知以上问题,就会导致pod仍会调度至问题节点。Node-problem-detector为了解决这个问题,社区引入了守护进程node-problem-detector,从各个守护进程收集节点问题,并使它们对上游层可见。Kube原创 2022-03-02 22:33:44 · 1643 阅读 · 2 评论 -
kubernetes部署rook+ceph存储
一、安装1、克隆rook代码#node上添加一块硬盘,不小于5Ggit clone --single-branch --branch master https://github.com/rook/rook.gitcd rook/deploy/examples2、创建rook operatorkubectl create -f crds.yaml -f common.yaml -f operator.yaml3、创建ceph cluster#等待pod变为runningkubectl g原创 2022-02-22 20:49:05 · 656 阅读 · 1 评论 -
ubuntu环境下kubernetes 切换容器引擎为containerd
1、关闭相关服务systemctl stop kubeletsystemctl stop dockersystemctl stop docker.socketsystemctl disable dockersystemctl stop containerd2、创建containerd配置文件sudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.toml3、修改co原创 2022-02-21 20:29:40 · 472 阅读 · 1 评论 -
ubuntu20.04使用kubeadm安装kubernetes1.23.4
一、环境配置1、关闭swapswapoff -avi /etc/fstabremove the line with swap keyword2、配置系统参数cat <<EOF | sudo tee /etc/modules-load.d/k8s.confbr_netfilterEOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bri原创 2022-02-21 20:27:40 · 1383 阅读 · 1 评论 -
containerd客户端crictl常用命令
1、查看镜像crictl images2、查看运行的容器#对应用户进程crictl ps3、查看运行中的pod对应sandbox进程crictl pods4、查看pod详细信息crictl inspectp eea1584366c1d5、查看容器详细信息crictl inspect 5389d4e04a9746、查看容器镜像详细信息crictl inspecti 70f5e18fddce8Docker中有的命令Crictl大部分都有。...原创 2022-02-16 23:04:58 · 3157 阅读 · 1 评论 -
kubernetes 切换容器引擎为containerd
1、关闭相关服务systemctl stop kubeletsystemctl stop dockersystemctl stop docker.socketsystemctl disable dockersystemctl stop containerd2、创建containerd配置文件sudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.toml3、修改co原创 2022-02-16 22:54:57 · 816 阅读 · 1 评论 -
使用helm安装etcd集群
1、添加helm仓库helm repo add bitnami https://charts.bitnami.com/bitnamihelm pull bitnami/etcd#可以看到安装包已下载到本地2、解压安装包tar zxf etcd-6.13.2.tgz3、修改配置cd etcd#修改密码#修改存储方式persistence: ## @param persistence.enabled If true, use a Persistent Volume Claim.原创 2022-01-29 15:37:31 · 4260 阅读 · 1 评论 -
prometheus使用cAdvisor监控容器
一、启动cAdvisor容器1、启动一个nginx容器docker run --name mynginxv1 -d --restart=always -p 800:80 xingning/mynginx:v1 nginxyum update2、运行cAdvisor#运行单个cAdvisor来监控整个Docker主机,被监控端安装完Docker后,添加启动cAdvisor容器docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/原创 2021-12-11 20:05:46 · 2937 阅读 · 0 评论 -
k8s集群部署showdoc
前言ShowDoc 是一个在线文档分享工具,可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线excel文档。在这里分享一下在阿里云托管k8s上是如何部署的。一、部署showdoc1、创建命令空间kubectl create namespace showdoc-test2、编写yaml文件vim showdoc.yamlapiVersion: v1kind: Servicemetadata: name: showdoc-service n原创 2021-12-06 21:26:32 · 970 阅读 · 1 评论 -
k8s 部署etcd集群
前言公司计划使用etcd来做统一配置管理,由于服务都在阿里云托管k8s集群上,所以这里也打算使用k8s来部署etcd集群。一、创建持久化存储1、创建etcd目录mkdir etcd/mkdir etcd/nas2、创建storageclass存储(1)设置rbaccd /data/etcd/nascat rbac.yamlkind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: nfs-原创 2021-12-06 21:18:09 · 5838 阅读 · 1 评论 -
k8s部署ingress-nginx
前言k8s集群服务部署好之后,需要对外提域名访问,这时候就需要ingress-nginx了,今天来给大家分享一下一、部署配置Ingress1、获取配置文件#文件已下载到本地https://github.com/kubernetes/ingress-nginx/tree/nginx-0.20.0/deploy2、准备镜像unzip ingress-nginx-nginx-0.20.0.zipcd ingress-nginx-nginx-0.20.0/deploy/vim mandato原创 2021-12-04 20:03:57 · 4997 阅读 · 2 评论 -
k8s 通过set-context 控制namespace 进行隔离
前言k8s可以基于命名空间实现完全隔离的环境,可以根据业务的不同划分不同的namespace来使用,在这里简单分享一下1、创建namespacekubectl create -f https://k8s.io/examples/admin/namespace-dev.jsonkubectl create -f https://k8s.io/examples/admin/namespace-prod.json#查看创建的命名空间kubectl get namespaces --show-la原创 2021-12-03 22:35:13 · 2207 阅读 · 0 评论 -
k8s-HPA自动扩缩容
前言生产环境中我们经常会遇见服务器资源不够的情况,如果是以往的扩容方式步骤十分繁琐,如果是在k8s集群里面那,那就十分简单了,只要资源池中的资源足够,那么就可以在很短的时间里对pod进行扩容,解决资源不足的情况,在这里介绍k8s的hpa自动扩缩容。一、配置HPA1、部署 metrics-servergit clone https://github.com/kubernetes-incubator/metrics-server.git修改默认的启动命令:vim metrics-server-d原创 2021-12-03 22:24:34 · 1333 阅读 · 0 评论 -
k8s-deployment滚动更新以及回滚
一、准备镜像#首先准备2个不同版本的镜像,用于测试(已经在阿里云上创建好2个不同版本的nginx镜像,大家可以自己做哈,输出不同的值就可以)docker pull registry.cn-beijing.aliyuncs.com/xxxx/nginx:v1docker pull registry.cn-beijing.aliyuncs.com/xxxx/nginx:v2二、手动编写yaml进行测试1、创建yamlvim roll_update.yamlapiVersion: extensio原创 2021-12-03 22:11:27 · 795 阅读 · 0 评论 -
kubeadm安装kubernetes1.22.3
前言kubeadm是kubernetes官方提供的一种快速安装k8s集群的工具,在这里分享给大家一、基础环境1、配置主机名与解析hostnamectl set-hostname masterhostnamectl set-hostname node1hostnamectl set-hostname node2vim /etc/hosts172.31.103.123 master172.31.103.124 node1172.31.103.125 node22、配置SSH无密码登原创 2021-12-02 22:07:22 · 1070 阅读 · 0 评论 -
docker私有仓库搭建
前言docker私有仓库解决方案很多,比如registry、harbor,我这里使用的是registry,harbor之后我会补充一下。一、服务端1、安装依赖rpm -ivh epel-release-latest-7.noarch.rpm2、安装dockeryum install -y docker3、启动dockersystemctl start dockersystemctl enable docker4、下载registry镜像(该镜像用于构建本地私有仓库环境)doc原创 2021-11-30 21:35:55 · 231 阅读 · 0 评论 -
Ceph分布式文件系统使用记录
前言ceph文件系统分为三种模式,分别为文件系统模式、块存储模式,对象存储模式三种,下面就一一为大家介绍怎么使用一、文件系统创建1、创建ceph文件系统#在创建之前可以先查看一下文件系统ceph fs ls目前是没有的2、创建存储池ceph osd pool create cephfs_data 128ceph osd pool create cephfs_metadata 128说明:命令最后的128是指定pg_num的值,这个值是不能自动计算的,需要手动赋予。一般来说,少原创 2021-11-28 17:00:04 · 635 阅读 · 0 评论 -
ceph分布式安装使用教程
前言k8s集群使用什么样的存储比较好那,我调研了一下分布式存储ceph,在这里分享给大家。一、基础环境1、服务分布情况Node1: admin,osd,monNode2: osd,mds, client2、 网络配置 (所有节点)修改主机名, 切记主机名不能出现下划线修改主机名(/etc/hostname):hostnamectl set-hostname node1hostnamectl set-hostname node2修改 /etc/hosts 加入vim /etc原创 2021-11-28 15:41:06 · 899 阅读 · 0 评论