k8s
自己学习k8s总结
三成讲技术
世界很大 自己很小 需要很努力很努力才能撑起自己的天
展开
-
K8S运维必知必会的 Kubectl 命令总结,收藏好了~
k8s命令总结原创 2023-01-11 13:41:02 · 2839 阅读 · 1 评论 -
16 张图硬核讲解 Kubernetes 网络
k8s网络原创 2023-01-11 13:35:02 · 295 阅读 · 0 评论 -
Kubernetes 安全检测Kube-bench
安全加固原创 2022-09-23 09:57:02 · 929 阅读 · 0 评论 -
kubernetes-1.24.x 特性
k8s原创 2022-09-16 09:40:05 · 167 阅读 · 0 评论 -
5 个冷门但非常实用的 Kubectl 使用技巧,99% 的人都不知道
k8s 命令 效率原创 2022-09-01 17:42:01 · 697 阅读 · 0 评论 -
k8s故障解决方法
pod处于pending状态可能是什么问题?1.镜像问题2.可能是node资源不足3.没有匹配的节点标签4.有污点node是not reay状态可能原因:1.kubelet启动有问题2.kubelet与apiserver网络问题3.kubelet携带证书问题,例如过期了service 访问异常排查1.service是否关联pod2.service指定target-port端口是否正常3.pod工作是否正常4.service是否通过dns工作5.kube-proxy正常工作6原创 2021-08-24 19:55:45 · 282 阅读 · 0 评论 -
k8s检测脚本
export KUBECONFIG=/path/to/your/kubernetes.yamlpods=""total=`/usr/local/bin/kubectl --kubeconfig=$KUBECONFIG get pods -o wide | grep service | sed -n '$='` # 1for pod in `/usr/local/bin/kubectl --kubeconfig=$KUBECONFIG get pods -o wide | grep service |原创 2021-08-02 10:35:23 · 448 阅读 · 0 评论 -
kubernetes日志回滚测试
结论容器挂掉后自动重启,pod不会重新创建,podname不会发生变化,k8s保留上次挂掉容器的日志信息手动重新部署,podname发生变化,不能获取到上次容器崩溃时的日志信息问题咨询电话:18311061660 ...原创 2021-07-27 10:21:47 · 264 阅读 · 0 评论 -
Kubernetes 集群优化大法
一、节点配额和内核参数调整对于公有云上的 Kubernetes 集群,规模大了之后很容器碰到配额问题,需要提前在云平台上增大配额。这些需要增大的配额包括:虚拟机个数vCPU 个数内网 IP 地址个数公网 IP 地址个数安全组条数路由表条数持久化存储大小参考gce随着node节点的增加master节点的配置:1-5 nodes: n1-standard-16-10 nodes: n1-standard-211-100 nodes: n1-standard-4101-250转载 2021-07-16 15:00:17 · 561 阅读 · 0 评论 -
k8s基础问答
1.k8s基础组件有哪些,什么功能2.一个pod创建过程3.网络选型需要注意什么4.pod中penging状态,是什么原因产生的,pod出问题,排查思路5.k8s发布策略(4种)6.手写raft7.你们监控用什么,怎么利用普罗米修斯监控pod信息,k8s状态,如果你来设计相关的监控如何做。8.如何利用k8s实现滚动更新,我说的是配置文件机制。9.statefulset是怎么实现滚动更新的10.k8s架构遇到什么问题,如何处理。11.kubectl exec实现原理原创 2021-05-07 19:48:05 · 136 阅读 · 0 评论 -
一个pod生成过程
kubectl -> apiserver -> (创建资源文件)-> etcd(一条数据)-> schduler(进行调度) -> kubelet检测到Pod调度过来 -> 通过container runtime 运行Pod,并更新到apiserver。用户通过 REST API 创建一个 Podapiserver 将其写入 etcdscheduluer 检测到未绑定 Node 的 Pod,开始调度并更新 Pod 的 Node 绑定kubelet 检测到有新的 P原创 2021-05-06 17:06:12 · 307 阅读 · 0 评论 -
k8s pod 状态 查询
CrashLoopBackOff: 容器退出,kubelet正在将它重启InvalidImageName: 无法解析镜像名称ImageInspectError: 无法校验镜像ErrImageNeverPull: 策略禁止拉取镜像ImagePullBackOff: 正在重试拉取RegistryUnavailable: 连接不到镜像中心ErrImagePull: 通用的拉取镜像出错CreateContainerConfigError: 不能创建kubelet使用的容器配置CreateContai原创 2021-04-28 18:11:18 · 3079 阅读 · 0 评论 -
Kubernetes(k8s) EmptyDir、HostPath、ConfigMap和Secret等几种存储类型介绍
介绍一个运行中的容器,缺省情况下,对文件系统的写入,都是发生在其分层文件系统的可写层的,一旦容器运行结束,所有写入都会被丢弃。因此需要对持久化支持。Kubernetes 中通过 Volume 的方式提供对存储的支持。下面对一些常见的存储概念进行一点简要的说明。EmptyDir顾名思义,EmptyDir是一个空目录,他的生命周期和所属的 Pod 是完全一致的,可能读者会奇怪,那还要他做什么?EmptyDir的用处是,可以在同一 Pod 内的不同容器之间共享工作过程中产生的文件。缺省情况下,Em原创 2021-01-26 16:49:04 · 817 阅读 · 0 评论 -
二十七、prometheus部署安装配置告警
1.部署前简介本次监控部署应用到的相关软件如下prometheus 数据采集和存储 提供PromQL语法查询alertmanager 警告管理 进行报警node_exporter 收集主机的基本性能监控指标blackbox_exporter 收集http,https,tcp等监控指标redis_exporter 收集redis相关的监控指标mysqld_exporter 收集mysql相关的监控指标pushgateway 向prometheus推送监控指标Prometheu原创 2021-01-15 15:21:35 · 1350 阅读 · 0 评论 -
二十六、kubeadm的高可用集群安装方式
1.集群初始化设置(1)配置阿里云源然后安装依赖包yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git(2)修改主机名hostname k8s-master1 && bashhostname k8s-master2 && bashhostname k8s-master3 && .原创 2021-01-13 13:49:36 · 234 阅读 · 0 评论 -
二十五、kubeamd安装方式的证书时间修改
如果更新k8s版本会默认更新证书检查证书有效期(一部分10年一部分1年)openssl x509 -in apiserver.crt -text -noout1、go 环境部署https://studygolang.com/dlwget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz tar -zxvf go1.12.1.linux-amd64.tar.gz -C /usr/local mv go /usr/local/vi /原创 2021-01-13 13:40:04 · 156 阅读 · 0 评论 -
二十四、基于kubernetes的pass概述
K8s为中心全部做完了对外提供api接口就是pass环境原创 2021-01-12 15:53:14 · 534 阅读 · 0 评论 -
二十三、使用Heml部署一些附件
1.部署dashboardhelm repo update #更新仓库(当然也可以添加)helm repo list #查看仓库信息helm fetch stable/kubernetes-dashboard #下载相关包tar xf kubernetes-dashboard-1.8.0.tgz helm install stable/kubernetes-dashboard -n kubernetes-dashboard --namespace kube-system -原创 2021-01-12 15:52:32 · 192 阅读 · 0 评论 -
二十二、Helm
https://github.com/helm/helm/blob/master/docs/charts.md1.含义①在没使用 helm 之前向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理 ②Helm 本质就是让K8S的应用管理(Deployment,Service 等 )原创 2021-01-12 15:50:46 · 108 阅读 · 0 评论 -
二十二、资源限制策略
官网文档网址:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/1.单位容器的资源需求,资源限制 requests:需求,最低保障; limits:限制,硬限制; CPU: 1颗逻辑CPU 一个2核双线程的CPU可以虚拟为4颗逻辑CPU1=1000,millicores 500m=0.5CPU 内存: E、P、T、G、M、K 1000Ei、Pi原创 2021-01-12 10:24:03 · 226 阅读 · 0 评论 -
二十一、Kubernetes高级调度方式
1.节点选择器(1)nodeSelectorapiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment namespace: default #指定命名空间 labels: app: nginx #控制器的标签spec: #控制器期望的状态 replicas: 1原创 2021-01-12 09:55:04 · 99 阅读 · 0 评论 -
二十、调度器、预选策略以及优选函数
1.调度过程简介Scheduler的调度算法是可以自定义的,默认是default Scheduler当用户请求向api-server创建pod的时候,检查权限等等都没有任何问题的情况下,接下来他会把请求交给Scheduler,由Scheduler从众多节点当中选择一个适用、匹配的节点,来作为接下来运行此Pod的节点,选择结果并不是直接反应在节点之上,而是会告诉api-server,并把结果记录在etcd中,这个结果会在一段时间内成为一个持久的状态,如果节点不发生故障,Pod不会因为资源紧缺而被omk原创 2021-01-12 09:43:20 · 261 阅读 · 0 评论 -
十九、基于canel的网络策略
说明Calico的官方地址:https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/flannel安装canel之前需要注意如果您使用的是pod CIDR 10.244.0.0/16,请跳至下一步。如果您使用的是其他pod CIDR,请使用以下命令设置一个名为POD_CIDR包含pod CIDR 的环境变量,并使用pod CIDR替换10.244.0.0/16清单。POD_CIDR="<your-p原创 2021-01-12 09:33:33 · 201 阅读 · 0 评论 -
十五、Serviceaccount(简称sa)认证
1.创建serviceaccountK8s集群账号分为用户账号useraccount和Serviceaccount(是指pod想访问api-server要用到的用户账号密码等)apiVersion: v1kind: ServiceAccountmetadata: name: admin namespace: default2.自定义pod连接api的认证用户apiVersion: apps/v1kind: Deploymentmetadata: creationTimestam原创 2021-01-11 10:53:34 · 1905 阅读 · 0 评论 -
十八、配置网络插件flannel
1.Kubernetes网络通信(1) 容器间通信同一个Pod内的多个容器间的通信, lo (2)Pod通信Pod IP <-(直达)-> Pod IP 意思就是pod和pod之间使用自己的IP不经过任何转换直达,通信双方所见的地址就是双方的地址(3)Pod与Service通信PodIP <--> ClusterIP IPVS和iptables规则可以实现,ipvs可以做负载但是无法取代iptables,因为很多功能ipvs做不到(4)Service与集群原创 2021-01-11 10:22:16 · 1292 阅读 · 1 评论 -
十七、k8s集群的管理方式
1、命令式create, run, expose, delete, edit, ... 2、命令式配置文件create -f /PATH/TO/RESOURCE_CONFIGURATION_FILE, delete -f, replace -f 3、声明式配置文件apply -f, patch, 第一种和第二种可以串着用 replace表示替换删除原来的用新的yaml重新创建,但是无法跟第三种串着用,apply可以就地修改,就是说用apply声明创建以后,修改完yaml直接apply应用就原创 2021-01-11 09:57:29 · 131 阅读 · 0 评论 -
十六、部署Dashboard
1、部署Dashboardwget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml2、将Service改为NodePortkind: ServiceapiVersion: v1metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-da原创 2021-01-11 09:49:31 · 753 阅读 · 0 评论 -
十四、K8S安全机制(rbac)Role-based
官网文档:https://kubernetes.io/docs/reference/access-authn-authz/rbac/1.Kubernetes的安全框架Kubernetes: 认证、授权 API server: subject --> action --> object 认证:token,tls,user/password 账号:UserAccount, ServiceAccount 授权:RBAC role, rolebinding clusterrole,原创 2021-01-07 16:08:37 · 248 阅读 · 0 评论 -
十三、有状态应用部署
1.概念有状态:db 如果mysql的主从,必须是远程的存储,在任意节点都可以挂载恢复之前的状态网络ID唯一,从而知道主的地址,pod是短暂的,新的就会换IP,得保证这个IP能一直在使用无状态:web 比如部署2个副本,跟其他没啥直接的关系,本地也没有需要持久化的数据其中有一个副本挂了,其他节点起来仍然可以提供服务没有影响K8S适合访问波动大、版本迭代快的、弹性伸缩的2.Headless Service确保解析的名称直达pod,给pod配置唯一名称3.StatefulSet(简称st原创 2020-12-31 15:52:05 · 341 阅读 · 0 评论 -
十二、数据卷与持久卷
1.Volume• Kubernetes中的Volume提供了在容器中挂载外部存储的能力 • Pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMounts)两个信息后才可 以使用相应的Volume存储类型本地 (hostPath emptyDir)网络 (NFS Ceph Glusterfs)公有云 (AWS EBS)(1)emptyDir临时目录,缓存,随着pod消失而消失 创建一个空卷,挂载到Pod中的原创 2020-12-18 10:18:14 · 224 阅读 · 0 评论 -
十一、配置管理
1.配置容器化应用的方式(1)自定义命令行参数; args: [] (2)把配置文件直接焙进镜像;2018/8/23 kubernetes.txt (3)环境变量 ① Cloud Native的应用程序一般可直接通过环境变量加载配置; ② 通过entrypoint脚本来预处理变量为配置文件中的配置信息; (4)存储卷2.Secret(加密)官网文档:https://kubernetes.io/docs/concepts/configuration/secret原创 2020-12-15 11:02:29 · 209 阅读 · 0 评论 -
十、Ingress从外部访问的最佳方式
概述客户使用https进行访问,域名会被解析为IP,而这个IP是你调度器的IP地址,但是客户连接的后端节点真实服务器,如果你认为集群足够安全那么在调度器可以卸载ssl,客户和调度器之间使用https,而调度器和后端节点使用http,但是service的NodePort是基于iptables或者ipvs的4层调度转发,不支持ssl卸载,那么就需要在每一个提供服务的节点配置https的sll证书,如果是k8s集群那么就是每个pod,注:service的NodePort前端加lb还只能加4层lb,因为如原创 2020-12-10 11:44:59 · 3584 阅读 · 0 评论 -
九、更新策略
1 更新策略参数 rollingUpdate: maxSurge: 5 maxUnavailable: 0maxSurge最多可用多少个,或者百分比,如果百分比不足1将补1maxUnavailable 更新过程中最多不可用为多少个,或者可以写百分比,如果百分比不足1将补12 金丝雀先开始更新一部分,然后暂停,观察效果,如果可以我们继续开始更新kubectl set image deployment nginx=nginx:1.15 && k原创 2020-12-10 11:20:58 · 271 阅读 · 0 评论 -
八、Service – 统一入口访问应用
概述• 防止Pod失联(服务发现)• 定义一组Pod的访问策略(负载均衡)• 支持ClusterIP,NodePort以及LoadBalancer三种类型• Service的底层实现主要有iptables和ipvs二种网络模式如果要确保每次都将来自特定客户端的连接传递到同一Pod,通过设置service.spec.sessionAffinity为“ClientIP”(默认为“None”),根据客户端的IP地址选择会话关联。通过service.spec.sessionAffinityConfig原创 2020-12-10 10:50:22 · 803 阅读 · 0 评论 -
七、部署应用常用控制器
Pod与controllers(控制器)的关系• controllers:在集群上管理和运行容器的对象 • 通过label-selector相关联 • Pod通过控制器实现应用的运维,如伸缩,滚动升级等1. Deployment• 部署无状态应用 • 管理Pod和ReplicaSet • 具有上线部署、副本设定、滚动升级、回滚等功能 • 提供声明式更新,例如只更新一个新的Image1应用场景:Web服务,微服务2更新策略maxSurge最多可用多少个,或者百分比,如果百分比不足1将原创 2020-12-09 17:58:43 · 145 阅读 · 0 评论 -
六、理解POD对象(老重要了如何理解透彻面试那是百分百过)
1. Pod容器分类Infrastructure Container:基础容器• 维护整个Pod网络空间• InitContainers:初始化容器• 先于业务容器开始执行• Containers:业务容器• 并行启动2. 镜像拉取策略官方文档网址:https://kubernetes.io/docs/concepts/containers/images/IfNotPresent:默认值,镜像在宿主机上不存在时才拉取• Always:每次创建 Pod 都会重新拉取一次镜像• Nev原创 2020-12-09 17:19:57 · 258 阅读 · 0 评论 -
五、YAML文件格式(会了话面试加分)
1.YAML格式说明YAML 是一种简洁的非标记语言。语法格式: • 缩进表示层级关系 • 不支持制表符“tab”缩进,使用空格缩进 • 通常开头缩进 2 个空格 • 字符后缩进 1 个空格,如冒号、逗号等 • “---” 表示YAML格式,一个文件的开始 • “#”注释2.快速生成方法(1)针对podkubectl create deployment nginx --image=nginx:1.14 -o yaml --dry-run> my-deploy.yamlkube原创 2020-12-07 18:01:02 · 246 阅读 · 0 评论 -
四、kubectl基础命令的使用方法(如果敲这些命令跟吃饭一样简单说明你已经是大牛了)
1 命令集合注解类型命令描述基础命令create通过文件名或标准输入创建资源基础命令expose将一个资源公开为一个新的Service基础命令run在集群中运行一个特定的镜像基础命令set在对象上设置特定的功能基础命令get显示一个或多个资源基础命令explain文档参考资料基础命令edit使用默认的编辑器编辑一个资源基础命令delete通过文件名、标准输入、资源名称或标签选择器来删除资源部署命令rol原创 2020-12-07 17:49:01 · 231 阅读 · 0 评论 -
三、k8s核心概念(工作中常用哦!!!)
1.Pod(豌豆荚很贴切哈哈)• 最小部署单元• 一组容器的集合• 一个Pod中的容器共享网络命名空间,进程不隔离例如一个pod中有nginx占用80,那么第二个容器用nginx占用80就会冲突,• 一个pod对应一个pause,一个pod中多个容器都依赖pause网络• Pod是短暂的2.Controllers• ReplicaSet : 确保预期的Pod副本数量• Deployment : 无状态应用部署• StatefulSet : 有状态应用部署• DaemonSet : 确原创 2020-12-07 17:12:20 · 110 阅读 · 0 评论 -
二、k8s集群架构及组件记住了排查故障
二、k8s集群架构及组件1.Master组件:kube-apiserver: 集群的统一入口,各组件协调者,以RESTful API提供接口 服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给 Etcd存储。 kube-controller-manager: 处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager 就是负责管理这些控制器的。 kube-scheduler: 根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以原创 2020-12-04 16:24:17 · 149 阅读 · 0 评论