cka 时候的总结

centos 7.9mini 然后3台两核4g的机器(7.x 无所谓)

firewalld和iptables只是一个工具,真正实现防火墙功能的是内核的netfilter(防火墙)

kubelet 需要在每个节点都装

容器中的文件都是临时存在的

数据券是由kubelet 去实现的

hostpath 挂载的目录是看pod在哪个节点上

k8s搭建遇到的问题:
1、没改kubeadm init初始化失败
大部分都是kubelet起不来,原因:swap、cgroups驱动没改systemd、docker及cri-dockerd没运行。可以使用journalctl -u kubelet -f 查看一下日志。

2、calico镜像下载的问题,一般情况下是网络的问题,可以尝试先docker pull试试,或者找个网络好的机器下载下来然后再上传。

cni 容器网络接口
cri 容器运行时接口

k8s在同一节点上面只能运行一个容器引擎

每个容器都是通过shim-runc去维护的

docker带containerd,不用再去单独去装了

containerd 是k8s 开发的

kubelet --help | grep runtime 可以查看k8s是否支持docker。有remote就是不支持的。

/etc/kubernetes 主要保存k8s组件的配置文件(基本上是安装目录)
/var/lib/kubelet 是kubelet 主要的目录

强者不畏惧变数

k8s 里面一切皆为资源

通常是一个项目或者一个团队才放一个命名空间

kubectl apply -f . 那个点表示当前目录的所有yaml文件。

recycle (回收),pv删除,目录里面的数据删除,但目录还在。

回收策略相对于pvc来说,删除pv不会影响后面的目录

clusterIP 为None的话表示不为它分配ip(也叫无头服务)

volumeClaimTemplates: 仅能使用在StatefulSet 上面。

service.命名空间.svc.cluster.local 访问域名的格式

etcd 默认是2m,configmap和secret 不会出现什么问题

准入控制插件在/etc/kubernetes/manifests/kube-apiserver.yaml 里

prometheus 是不用安装数据库的,里面的tsdb数据库是存储的

service discovery 是prometheus 的服务发现

deployment 部署的是通过service 的域名去连接的
StatefulSet 部署的是通过每个pod的域名去连接的

StatefulSet 部署的角色(比如mysql的主服务器,从服务器)需要自我去区分(区别角色也就是去区别配置文件,ip,节点标识,数据储存什么的。如mysql的主服务器和从服务器的配置文件是不一样的)

内部是集群往k8s上面去布基本上都是有状态应用,比如lnmp(pod之间是不对等的,而且需要通信)

kubectl get cs 查看master组件的状态

所有执行的命令都是经过api-server

有部署kubelet 的都称之为节点

kubectl get nodes 后面的版本号是kubelet 的版本号

kubectl top -> apiserver -> metric-server(pod) -> kubelet(cadvisor)->容器

docker load < 1.tar 表示导入镜像

kubectl get apiservices 查看一下api里面其中的服务(主要查看外部的服务注入到里面)

master组件: kube-controller-manager kube-apiserver kube-scheduler
node组件: kube-proxy kubelet

容器的创建销毁,挂载都是由kubelet 去执行的

kubectl logs pod 查看的pods 日志是由docker去存放的

/var/lib/docker/containers/ 是容器的临时工作目录

kubectl logs --> apiserver --> kubelet --> docker (xxx-json.log)

kubectl exec -it n1 – bash 然后cd logs 也可以查看日志

kubectl top pods --sort-by=cpu

create 只创建不更新
apply 创建和更新

status 与用户没有任何关系,是k8s保留输出状态用的

kubectl explain deployment.spec.template.spec 表示查看写deployment下面的spec下面的template下面的spec的yaml文件字段写什么

json 和yaml文件是可以相互转换的,比如kubectl get pods n1 -oyaml 可以写成kubectl get pods n1 -ojson

edit 保存之后就生效。

kubectl set image deployment web1 -n test nginx=nginx:1.16 --record 表示升级命名空间test下面的deployment下面的web1 的镜像为nginx:1.16 其中–record 表示记录其中升级的配置。

rollout 查看历史版本
rs 可以看到历史版本号与rs对应关系,从rs可以再得知当前对应的镜像。(可以使用 kubectl describe rs web1 -n test

kubectl rollout undo deployment/web1 -n test --to-revision=2 表示回滚到版本2

kubectl rollout undo deployment/web1 -n test 表示回滚到上一层

pod 是k8s中最小的调度单元

pod 的ip是不固定的,重建就会变。

kubectl logs pod1 -c pod1 表示查看pod1里面容器pod1的日志

web-8667899c97-z6w9d 其中第一个deployment 创建的名字,第二个866* 是rs 的名字,最后一个是随机字符串。

k8s 里面的pod 不能重启,删除然后再重新建就是重启。

只有deployment 才有rs 。 rs是控制副本数的

always 会重建容器,而不是pod

kubelet 发起的健康检查

| 带表示的是多行,你可以在下面写任意的数据,json和yaml都可以写

键值一般情况下都是以变量的方式注入,多行数据一般是以数据卷的方式挂载到容器上

items:

  • key 表示在comfigmap 上面定义的key
    path 表示数据卷挂载到目录的名字,如redis.conf

:24 可以直接进入24行里面

sublime.txt

generic 的类型是Opaque

ca.crt和ca.key 属于根证书,其他的是客户端证书

kubectl --kubeconfig=aliang.kubeconfig get pods 表示使用aliang这个证书配置文件去查看pod

空值是核心组,kubectl api-resources 查看版本是v1,然后后面什么都没有就是核心组

在rabc.yaml 文件里面写的要加s,如deployment要写成deployments

kubectl --as=system:serviceaccount:test:aliang get pods -n test
表示用服务账号aliang命名空间test 来查看pod

通常情况下get和list 都加,因为实际上使用get通常都是list( 在调用api的时候好像有区分)

初始容器不支持健康检查

kubelet 是负责容器生命周期管理的

kubelet 起来之后,即使集群没有起来也能运行pod
kubelet 不能使用deployment部署pod,因为集群还没有起来。因为deployment 是由controller-manager这个组件支持的,scheduler 是负责调度的

/etc/kubernetes/manifests 这个下面的yaml文件,可以让kubelet去创建。想让那个节点上的kubelet 去创建,你就把yaml文件放到那个节点上的/etc/kubernetes/manifests 下面

list-watch 是订阅与发布的一种机制.

1、kubectl 想api-service发送创建pod请求,然后api-server把pod配置 写入etcd,然后etcd再给api-server最后反馈给你创建了pod。
2、scheduler 收到api-server有新的pod的事件,scheduler根据自身调度算法选择一个合适的节点,并打标记pod=k8s-node1
3.kubelet 收到分配到自己节点的pod,调用docker api创建容器,并获取容器状态汇报给apiserver

集群中任何数据的变化 api-server都会写入Etcd数据库
kubectl get pods 就是查看etcd 数据库的

kube-proxy 是控制容器网络的,主要负责service 的创建
controller-manager 负责控制器的创建,例如deployment

requests 必须小于等于lists的值

sp可以实现pod水平扩容,vp可以实现pod横向扩容

给pod 打上标签他就会分配有标签的node上面,没有则不分配

在同一个节点上面打的标签key不能一样,value可以一样
第一次匹配的label,然后节点上没有标签然后没有分配成功,后续继续再给node打上标签也是可以分配成功的。

单个pod的备份是不是打包容器(可以使用yaml文件,deployment会拉起多个,也可以用etcd备份)

controllers 称之为控制器

{} 代表的是所有pod

kube-apiserver 所有的操作都是对接的etcd

etcd的ip为什么是宿主机的ip,因为它共享了宿主机的网络
hostNetwork: true 表示使用的是宿主机的网络

2380 端口是集群内部通信需要
2379 是数据端口,程序都是根据这个端口去读写数据的,也就是etcd的端口
6443 是apiserver 入口的地址

etcdctl 的包是etcd

etcd 备份很快,如有几十m和和几个g可能的话也就十几秒

etcd 备份的是全部,mv备份的应该etcd

升级是先升级master,然后再升级node

基本上都是三个月一个版本,然后第三个版本会基本上保障第三个版本适用的。如1.23 保障1.22和1.21版本。 基本上不要跨大版本升级,如1.21升级到1.24。

一般公司用的前面一两年的版本,基本上和最新版差5个版本。
为什么要升级呢: 当前版本有bug,对新版本有功能需求,纯属癖好

master 默认打的有污点,所以业务pod不会分配给master,只有系统的一些pod才会分配给它

在生产环境中尽量的不要使用pod

pod 如果没有指定标签的话也会分配到带有标签的node上面

污点可以只配置一个key,不过大部分也是key:value出现

nodeselector与tain 是分别独立的,两者都用都必须都满足

如果加上污点容忍,pod也不会分配到指定的污点上面,只不过随机分配的时候会分配到上面

strategy: {} 是关于滚动升级的参数

operator: “Equal” 是等于的意思

confd+consul 是服务发现的一个产品,confd动态更新负载均衡的文件,cousul是去读confd的文件然后再加载

service 不通的话,最多的可能性是service 的标签和pod的标签不一样,导致分发错pod或者连接不上了。

kubectl expose 的时候必须是pod已经创建好的了,而create service 不需要先创建pod

svc是纯4层的东西

loadbalancer 是针对公有云平台的

service 默认的转发是由iptables 去实现的,是默认的一种行为。docker也是。

iptables都是从上到下

ipvsadm -L -n 大L是列出规则,而n是解析里面的名称

iptables 主要是防火墙,ipvs主要是负载均衡

100台以下用iptables
100台以上用ipvs

service 的地址可以自己配置,建议交给系统。因为自己配的可能会冲突。

service 支持会话保持功能

toa应用可以获取源端ip

Completed 是一个完成的状态,不是错误。

域名.pem 是域名证书 ca.pem 是根证书

ingress 可以设置副本数,默认是一个。

用daemonset 部署ingress共享主机网络模式(作业)

logs 是从docker中获取日志的,pending 不可以查看,可以使用describe查看

comfigerror 可能是数据券错误,挂载的文件没有正确挂载

pod正常吗,可以看有没有重启,可以访问一下看能不能访问到

service是否关联pod,可以kubectl get ep查看一下有没有连接到正确的ip地址和端口

dns解析不了,你可以去查看corndns有没有正常运行,kube-proxy有没有正常运行,cni网络插件是否正常工作

四层就是IP+端口
七层就是Url的

java应用大部分目录都在src 里面

要去看连接的是什么数据库,前端用的什么,有没有用缓存等等,还有其他的可以问问开发

maven 是java的编译工具

clean package 清理之前的残留,记录。 -Dmaven.test.skip表示跳过一些单元测试

maven 的配置文件在 /etc/maven/settings.xml 的文件里

unzip -d 是指定目录的

镜像是什么: 打包整个操作系统的文件和目录,即包括应用以及它运行所需要的依赖
镜像文件不包括操作系统和系统内核,它共享宿主机内核。

创建好镜像可以先在docker 上面跑跑,看看行不,可以的话再上k8s

公开镜像拉取不需要登录,上传镜像不管是公开还是私有都需要登录

k8s拉取私有镜像提示要登录,在docker上面登录是没用的,需要

resources: {} 这个字段是写资源配额的

资源限制和pod存活、就绪检查一般都会配置上的

subpath 是挂载到子路径里面去的,不会覆盖掉容器原有目录的内容

没有信用卡,护照是不是要填中文名字

升级etcd的时候版本号后面加上-00

鼠标放上去会有个复制按钮

ubuntu 可以装etcdctl 这个命令,不行的话就装etcd

systemctl cat kubelet 是查看kubelet service 的

可以通过kubectl get nodes 查看集群名字

部署有可能是deployment

pod 不支持在线添加容器,只有deployment 支持

ready 有几个尝试一下vim写进去

容器之间的共享都要使用emtpdir

ingress ip和域名都可以访问,只不过访问的不是你创建的ingress那个ip,而是创建的ingresscontroller这个ip和端口。可以使用kubectl get svc -n ingress-nginx 去查看。绑定的service 的类型NodePort个ClusterIP都可以。

grep -c 表示打印行数

wget http://49.232.8.65/yaml/components.yaml
metrics-server 的中国源,

lizhenliang/metrics-server:v0.4.1

kubectl delete pods nginx-76d6c9b8c-gv472 --grace-period=0 --force 表示强制删除pod --grace-period=0 表示删除pod的延迟时间为0秒 --force表示强制,相当于kill -9

想要补全在k8s 文档里面搜索bash

docker-compose up -d 是启动所有的容器
docker-compose ps 是查看所有的容器
docker-compose stop 是关闭所有的容器

jenkins 主要实现的是一个自动发布的角色(自动构建镜像,自动发布,自动部署)

gitlab 也支持ssh 协议拉取代码

git add . 是将代码提交到仓库的暂存区

git commit -m ‘all’ 提交到本地仓库里

git push -u origin master 推送到镜像仓库

8080 是Jenkins 图形访问的端口,50000 是之间的分布式架构进行通信的,容器启动后数据会存储在/var/jenkins_home的目录,所以该目录需要pv持久化。
jenkins 可以用tomcat,java断渣,k8s部署。

lts 是Jenkins官方长久维护的镜像

pod 一直Terminating 可以重启pod 所在节点的kubelet

安装jenkins 的时候尽量选择选择插件来安装,因为选择第一个推荐的话会拖延你Jenkins 初始化的速度,可以后面用插件的时候再单独的去装。

Jenkins 都是一些插件化,模块化的页面。就是说你用一些功能就要装对应的插件。默认的都是一些基本的。提到一些安全性的问题可以忽略它。

如果Jenkins下载插件比较慢的话可以用sed 替换下Jenkins目录下面的/updates/default.json 源

Jenkins file 是pipeline 脚本

.m2 是maven 的缓存目录

alertmanager 是prometheus 的告警功能
node_exporter 是监控k8s集群node节点的状态
pushgateway 是把自定义的监控数据发送给prometheus

main 的分支不是很稳定的

kubectl get all 是查看当前命名空间下所有的资源

helm 是k8s包的管理工具,主要解决安装k8s一些依赖的问题

cluster-admin 是集群的管理角色

tsdb 是prometheus 的数据库

prometheus 监控的数据存在磁盘里面

kubectl create service externalname nginx --external-name nginx.db.svc --dry-run=client -oyaml 表示创建一个service 准备代理外部的服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值