![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kubernetes
来自万古的忧伤
努力,勿让自己继续活在后悔中
展开
-
分享一下笔者的k8s学习路线
第一步 安装首先要了解k8s的安装方式,想学那么首先你需要有一个环境,k8s有很多种安装方式,常见的以及企业中用的1.kubeadm安装kubeadm安装2.二进制安装二进制安装二进制安装分为 容器安装cni 和物理部署cni3.托管k8s集群首先我们需要安装一个集群第二步当我们有了一个k8s集群之后那么我们需要了解各个组件的原理 以及他们能为我们做什么,既然要学那说明这个东西可以解决我们工作中的一部分痛点,那么我们解决了什么问题 ,他的各个组件分别承担了什么工作原理了解了原理我们需原创 2020-07-30 00:07:38 · 2772 阅读 · 0 评论 -
docker用root身份登陆容器
执行命令带上user参数就可以docker exec -it --user root <container id> /bin/bash原创 2022-05-18 21:37:22 · 970 阅读 · 0 评论 -
查找容器网卡与宿主机网卡的对应关系
#进入容器查看网卡name kubectl exec -it postgres-6b5c55f477-sjwh6 -n argo bash ip aip link show | grep 33brctl show其实cni0 在这里充当了一个交换机的功能原创 2022-03-31 18:06:00 · 1514 阅读 · 0 评论 -
Image镜像规范
docker save alpine:3.12 > alpine.tarmkdir test mv alpine.tar test/cd test tar xf alpine.tarls Layers定义了分层这个就是运行的环境#这个文件就是定义了config.json runc 运行指定的config文件0ca43409a9c97dfd1076dbe4a8fffb26c574e4bb1f977dda8f5bd20e0114d19b.json我们针对这个镜像做bui原创 2022-03-26 16:57:32 · 440 阅读 · 0 评论 -
Runc创建pause容器共享Namespace空间
一 创建Pause容器这个建立在之前创建过网络ns的情况下https://blog.csdn.net/weixin_45413603/article/details/123727247?spm=1001.2014.3001.5501mkdir pause/rootfsdocker export $(docker create ibmcom/pause:3.1) | tar -C pause/rootfs -xvf -rc run -d pause > pause.out 2>&原创 2022-03-25 22:03:25 · 949 阅读 · 0 评论 -
Runc配置容器ip并且配置对外转发
一 配置网络环境我们需要brctl来创建网桥yum install -y bridge-utilsbrctl show 创建网桥 并且给网桥配置ip 这个网桥可以理解为就是一个交换机brctl addbr test0ip link set test0 upip addr add 10.12.0.1/24 dev test0在网桥创建两个网卡 并且veth0-host绑定在 test0的网桥上面ip link add name veth0-host type veth peer nam原创 2022-03-25 09:32:01 · 3673 阅读 · 0 评论 -
Runc挂载目录并且使用exec进入容器
一 写一个http的go程序package mainimport ( "flag" "fmt" "github.com/gin-gonic/gin" )var port intfunc init() { flag.IntVar(&port,"port",9090,"-p")}func main() { flag.Parse() g := gin.Default() fmt.Sprintf("http server is run port is %v",port原创 2022-03-24 21:19:06 · 876 阅读 · 0 评论 -
通过Runc来启动容器
一 Runc与docker的关系runC它是用来运行容器的一个轻量级工具。被称为运行容器的运行时,它负责利用符合标准的文件OCI(Open Container Initiative)标准等资源运行容器譬如当我们执行docker run alpine sh的时候。1、 到了shim环节后,shim启动runc2、runC负责找到alpine这个镜像文件中的sh程序并运行3、交给它的父进程shim 接管 sh 这个进程支持Linux namespace;对Linux中可用的所有安全功能的本地原创 2022-03-24 16:18:57 · 2655 阅读 · 0 评论 -
Admission Controller简介
准入控制器介绍https://kubernetes.io/zh/docs/reference/access-authn-authz/admission-controllers/动态准入控制器 https://kubernetes.io/zh/docs/reference/access-authn-authz/extensible-admission-controllers/创建证书vi ca-config.json { "signing": { "default": { .原创 2022-03-18 11:20:20 · 1106 阅读 · 0 评论 -
模仿kubectl的top功能
package mainimport ( "context" "fmt" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/clientcmd" "k8s.io/metrics/pkg/client/clientset/versioned")func main() { config ,err := clientcmd.BuildConfigFromFlags("","/Users/qushuaibo/.k原创 2022-03-17 14:33:07 · 744 阅读 · 0 评论 -
k8s部署metrics-server
如果是镜像问题可以https://blog.51cto.com/u_15309736/4772539可以通过阿里云以及github来拉海外镜像apiVersion: v1kind: ServiceAccountmetadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind:原创 2022-03-17 10:54:51 · 295 阅读 · 0 评论 -
Go实现kubectl apply操作
package mainimport ( "bytes" "context" "fmt" "io" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" syaml "k8s.io/apimach原创 2022-03-16 14:34:07 · 1106 阅读 · 0 评论 -
containerd 命令行工具之 ctr与crictl
一 安装官方文档注: ctl是 containerd 的一个命令行工具 但是crictl是k8s提供的对接cri的一个命令行工具https://github.com/kubernetes-sigs/cri-tools/releases github下载对应的包命令行补全source <(crictl completion bash)crictl 默认是docker.sock 我们需要修改配置文件对接containerdvim /etc/crictl.yamlruntime原创 2022-03-15 10:15:44 · 1166 阅读 · 0 评论 -
kubectl插件之pod通过标签过滤
package mainimport ( "context" "fmt" "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/client-go/kubernetes" "log" "os")var client = InitC原创 2022-03-13 07:46:17 · 1404 阅读 · 0 评论 -
各种操作集合
一 强制删除podkubectl delete po <your-pod-name> -n <name-space> --force --grace-period=0二 命令行补全yum install -y bash-completionkubectl completion bash >/etc/bash_completion.d/kubectlhelm completion bash >/etc/bash_completion.d/helmcrictl原创 2022-03-11 16:10:01 · 159 阅读 · 0 评论 -
kubectl通过插件获取pod列表
一 获取pod基础信息并且格式化展示package mainimport ( "context" "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/client-go/kubernetes" "log" "os")var cl原创 2022-03-11 15:29:34 · 1041 阅读 · 0 评论 -
kubectl插件开发之基础
一 创建环境写个可执行程序(脚本也可) 放到PATH目录下文件名必须是kubectl-xxxxmkdir /Users/qushuaibo/temp/kubectl-pluginsexport PATH=/Users/qushuaibo/temp/kubectl-plugins:$PATH二 简单的测试样例package mainimport "fmt"func main() { fmt.Println("test pods")}go build main.gomv ma原创 2022-03-11 10:12:32 · 427 阅读 · 0 评论 -
k8s二进制部署(版本1.20)
一 基础优化 # 关闭防火墙systemctl stop firewalldsystemctl disable firewalld # 关闭selinuxsed -i 's/enforcing/disabled/' /etc/selinux/config # 永久setenforce 0 # 临时 # 关闭swapswapoff -a # 临时sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久 cat > /etc/sysct原创 2022-03-09 08:33:18 · 1591 阅读 · 0 评论 -
k8s内核优化
net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-arptables = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1net.ipv4.ip_local_port_range原创 2022-03-01 23:00:25 · 747 阅读 · 0 评论 -
k8s cri由docker更换为containerd
containerd config default > /etc/containerd/config.toml #生成containerd 配置containerd 配置需要修改以下几项 需要修改的都特殊标记了 #这里修改的是containerd的存储目录root = "/docker-data/containerd-data"state = "/docker-data/containerd-state" [plugins."io.containerd.grpc.v1.cri原创 2022-01-20 16:00:55 · 1484 阅读 · 0 评论 -
istio-jaeger部署
一 简介Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API。分布式追踪系统用于记录请求范围内的信息,包括一次调用的服务链路以及每个服务的延时,能够帮助我们很好的分析微服务间链路调用的错误及瓶颈。OpenTracing api 及其原理将在下一篇 blog 中介绍。由于 istio 默认支持 Jaeger,因此准备测试下 Jaeger与Istio的集成。Jaeger 整体架构如下图,主要包括3个组件: agent,collector以及query(UI)agen原创 2021-12-28 11:28:23 · 2131 阅读 · 3 评论 -
k8s解析之coredns解析问题
在 Kubernetes 中,服务发现有几种方式:①:基于环境变量的方式②:基于内部域名的方式基本上,使用环境变量的方式很少,主要还是使用内部域名这种服务发现的方式。其中,基于内部域名的方式,涉及到 Kubernetes 内部域名的解析,而 kubedns,是 Kubernetes 官方的 DNS 解析组件。从 1.11 版本开始,kubeadm 已经使用第三方的 CoreDNS 替换官方的 kubedns 作为 Kubernetes 集群的内部域名解析组件,我们的重点,是 CoreDNS。一.原创 2021-12-21 11:41:26 · 2927 阅读 · 0 评论 -
kubernetes修改pod cidr以及service cidr
目前环境是k8s 1.20.11 使用flannel作为cni插件一 首先需要修改配置文件参数1.controller 需要修改--cluster-cidr=10.1.0.0/16 \2.kube-proxy需要修改clusterCIDR: 10.1.0.0/163.然后重启controller以及kube-proxysystemctl daemon-reload && systemctl restart kube-controller-manager.service.原创 2021-12-14 17:34:34 · 10947 阅读 · 0 评论 -
Kubernetes集群二进制安装csr自动通过
# 创建自动批准 CSR 请求的 ClusterRolekind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: system:certificates.k8s.io:certificatesigningrequests:selfnodeserverrules:- apiGroups: ["certificates.k8s.io"] resources: ["certificatesigningrequ原创 2021-11-25 17:41:32 · 457 阅读 · 0 评论 -
Kubernetes的Pod状态为RunContainerError
问题发生的现象:重启k8s 物理服务器 pod调度过去的时候会出现如下所示的提示pod状态为RunContainerErrordescribe pod 看到k8s问题处理 > image2021-10-13 10:52:20.pngkubelet在重启的时候会出现如下所示日志Fail to get rootfs information unable to find data for container /Image garbage collection failed once. Stat原创 2021-10-13 11:02:29 · 2688 阅读 · 0 评论 -
k8s Gpu节点安装
k8s 部件是一样的 ,就是需要特殊定制的dockerdocker安装curl https://get.docker.com | sh && sudo systemctl --now enable dockersystemctl status dockerdistribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-do原创 2021-08-05 13:53:53 · 256 阅读 · 0 评论 -
docker 目录占用过大清理
docker 目录占用过大 一般分为三种情况docker system df 可以看到如下所示images 说明镜像占用过多containers 如果占用过大说明容器运行中写入文件内容过大local volumes 本地卷的空间使用情况docker system df -v 我们可以看到详细的使用情况 每个image 或者container 使用存储大小...原创 2021-03-17 07:43:01 · 2925 阅读 · 0 评论 -
Docker基础
一、管理镜像常用指令(image)Docker imageSave保存镜像为tar文件的时候 -o选项或者 >docker image save centos:7 > /root/1.tar同理load 加载镜像的时候可以用 -i 也可以 或者 <Docker run --link 默认网桥也可以使用dns当然创建新网桥也可以有dns 但是默认的网桥...原创 2020-03-13 19:42:41 · 209 阅读 · 0 评论 -
基于docker环境构建jenkins CI/CD
实验环境:192.168.74.237 jenkins、git客户端192.168.74.230 git仓库、harbor仓库官网: Docker官网https://www.docker.com/Docker二进制包网址https://download.docker.com/linux/static/stable/x86_64/Docker镜像地址https:/...原创 2019-09-19 23:53:09 · 445 阅读 · 0 评论 -
docker构建LNMP
一、安装dockerDocker官网https://www.docker.com/Docker二进制包网址https://download.docker.com/linux/static/stable/x86_64/Docker镜像地址https://cloud.docker.com/二进制安装需要写systemctl的启动文件,解压以后放置可执行目录也就是$PATH内关闭防火墙和se...原创 2019-09-07 13:18:22 · 229 阅读 · 0 评论 -
kubernetes之namespace与node绑定
使用PodNodeSelector准入控制器更多请查看官网文档:https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/一 plugin方式1、修改kube-apiserver配置文件,找到–enable-admission-plugins=参数,添加PodNodeSelector参数–enable-admission-plugins=PodNodeSelector这里–enable-admissi原创 2020-09-15 16:55:46 · 4292 阅读 · 0 评论 -
kube-proxy命令行参数
本文中所使用的是1.16的kube-proxy参数类型描述默认值–add-dir-headerbool如果为true,则将文件目录添加到标题中–alsologtostderr记录到标准错误以及文件–bind-address 0.0.0.0代理服务器要使用的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)0.0.0.0–cleanupbool如果为 true,清理 iptables 和 ipv原创 2020-08-13 17:08:53 · 1010 阅读 · 0 评论 -
kubelet 命令行参数
参数类型kubelet的参数在加载过程中一种是通过命令行直接加载,一种是通过–config指定一个配置文件 然后去加载,一种是已经弃用 或者是在未来版本中会弃用的参数configxxx \xxxxx \已弃用参数(config可指定)(已弃用:在 --config 指定的配置文件中进行设置。有关更多信息,请参阅 https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/。)参数类型描述默认值原创 2020-08-13 15:20:32 · 1829 阅读 · 2 评论 -
kube-controller-manager命令行参数
不断更新中引用部分下面有些参数会用到duration的单位是时间单位“ns”、“us”、“µs”、“ms”、“s”、“m”、“h” 控制器列表有All controllers(默认开启): attachdetach, bootstrapsigner,cloud-node-lifecycle, clusterrole-aggregation, cronjob,csrapproving,csrcleaner, csrsigning, daemonset, deployment, disruption原创 2020-08-11 18:48:20 · 1061 阅读 · 0 评论 -
预选算法与优选调度算法
来自《kubernetes源码剖析》预选算法 CheckNodeConditionPred 检测节点是否处于就绪截断 GeneralPred 检查节点上pod资源对象数量的上线,以及CPU 内存 GPU等资源是否符合要求 NoDiskConflictPred 检查当前pod资源对象使用的卷是否与节点上其他的pod资源对象使用的卷冲突 PodToleratesNodeTaintsPred 如果当前节点被标记为taints,检查pod资源对象是否能容忍node t...原创 2020-07-28 13:11:06 · 531 阅读 · 0 评论 -
基于prometheus operator引入外部exporter
基于k8s平台部署prometheus operator 引入外部exporter的数据场景为prometheus operator部署在k8s集群内部 rabbitmq在集群外部 我需要拿到外部的rabbitmq exporterprometheus operator 通过crd 以及webhook controller 实现了一部分自己的逻辑在里面 所以我们通过操作crd 的cr 就可以对k8s内部资源做修改ep.yamlkubectl apply -f ep.yaml -n xxxxxx是原创 2020-07-27 18:31:16 · 885 阅读 · 0 评论 -
Go之Operator(三)
学习链接operator实战关于k8s常用lib库项目介绍apimachineryapimachinery项目概览apimachinery子项目主要是k8s服务端和客户段项目都共同依赖的一些公共方法,struct,工具的定义. 主要是服务于kubernetes,client-go,apiserver这三个项目.api目录(1)apitesting这里主要是帮我们做了一些默认字段的填充,就比如你创建的时候有些字段没设置,这里就会设置默认的(2)equality用来做转换的一些东西原创 2020-07-25 19:20:03 · 432 阅读 · 0 评论 -
Go之Operator(二)
学习链接operator实战关于k8s常用lib库项目介绍apiapimachinery1.api项目概览api子项目主要是k8s中各个主要项目中通用的一些api的struct的定义.git clone https://github.com/kubernetes/kubernetes.gitgit checkout -b remotes/origin/release-1.15.0 v1.15.0 #修改至当前版本(1)admission简单介绍type 主要是定义结构体的属性re原创 2020-07-25 17:53:02 · 645 阅读 · 0 评论 -
Go之Operator(一)
学习链接operator实战k8s开发人应该掌握的技能k8s基础api的规范和基本概念,以及一些常用的基础工具和库k8s子库api,apimachinery,client-go等基础库的熟悉k8s扩展api相关的开发框架聊聊k8s的API模型的定义对应API模型的操作资源模型的分类关于Labels,Selectors和Annotations的简单介绍关于controller的简单介绍1. 资源模型组成scheme(TypeMeta) 包含group version原创 2020-07-25 15:58:41 · 1370 阅读 · 0 评论 -
kube-scheduler命令行参数详解
来自《kubernetes源码剖析》Misc flags 其他参数 --config string 用于设置kube-scheduler配置文件路径 --master --master 用于设置kubernetes api service 地址,该地址会覆盖kubeconfig中的相同参数 --write-config-to string 如果制定该参数,将该参数写入kubeconfig并退出 --bind-address ip 用于设置监控原创 2020-07-22 13:07:38 · 969 阅读 · 0 评论