前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gitlab CI/CD 实践四:Golang 项目 CI/CD 流水线配置

Gitlab CI/CD 实践四:Golang 项目 CI/CD 流水线配置

作者头像
Yuyy
发布2024-07-14 13:34:28
1120
发布2024-07-14 13:34:28
举报
文章被收录于专栏:yuyy.info技术专栏

K8s

  • 如何通过 kubeproxy 保证两个 Pod 之间的相互通信?

kubeproxy 会监听 pod 的变化,在 node 上配置 iptables规则,将访问的 service ip,做 DNAT,转到 service 负载均衡的endpoint ip。但是 iptables 查找负载均衡的 endpoint 是 O(n)复杂度,当集群 pod 数量庞大时,性能低下。而 ipvs 实现方案,可以实现 O(1)复杂度查找,性能更好。 iptables 实现方案还有个缺点,无法额外配置自定义的 nat 规则。因为在nat表里面对数据包进行dnat操作过后,数据包就不在执行nat表里面的其它规则

  • K8S环境之下,从 service 进来的一个流量,它经过很多层,例如kubeproxy,iptable规则,然后完了之后它又要 net 到容器里面去。那有些容器可能还是 overlay 的。K8S 内的网络问题的话有什么手段?
  • 比如说他有些在 overlay 的网络,比如说 vxlan ,或者是 GRE 或者 IPIP 类似于这种,那你 TCPdump 的时候你是不知道。因为你的 pod 的 IP 是包在里面的。
  • 有哪些工作负载的资源?

  • 无状态工作负载
    • Deployment、ReplicaSet
  • 有状态工作负载
    • StatefulSet
  • 守护进程工作负载,保证每个节点上运行着这样一个守护进程
    • DaemonSet
  • 批处理工作负载,适用于一次性的任务
    • Job、CronJob
  • K8S 的这个权限体系
  • 有基于 K8S 的那个 Ingress 来做路由吗?
  • operator 的原理
  • 你是订阅了事件以后,然后自己又塞到队列里面吗?还是用K8s那个informer 他自己带的那个队列?
  • 那你有没有考虑过操作失败的一个兜底方案。
  • K8s 的一些自带的一些资源,我要修改它,怎么保证进程安全。
    1. K8 它自己有这个安全性的保证相关的逻辑吗? 乐观锁,通过 resourceVersion
  • K8s 的不同版本之间有什么区别?更新的时候有什么注意事项你有了解过吗? 稳定版、beta、alpha 版本针对弃用 api 的区别
    1. GA API 版本可以被标记为已弃用,但不得在 Kubernetes 的主要版本中删除
    2. Beta API 版本在引入后不超过 9 个月或 3 个次要版本(以较长者为准)将被弃用, 并且在弃用后 9 个月或 3 个次要版本(以较长者为准)不再提供服务
    3. Alpha API 版本可能会在任何版本中被删除,不另行通知

    更新的注意事项

    1. 阅读发布说明,如果有弃用的 api,通常会保留几个版本,然后
    2. 先在测试环境验证
    3. 备份数据
    4. 参考升级说明进行升级
    5. 滚动升级,Kubernetes 允许你逐个升级控制平面的组件和工作节点,这样可以在升级过程中保持集群的可用性。
    6. 验证
  • client-go 在用的时候有什么注意事项你知道吗?
  • k8s 的 request limit,哪一块会对应到 cgroup 里面去?
  • 容器网络方面的排查
  • 容器的网络方面你了解吗?比如说那些。就两个 Pod 之间,他那个网络是怎么通信。
  • indexer 的实现
  • workerqueue的实现
  • informer 这种就是比如说像你自定义的一些 CR,然后你比如说你也想做一些cache,因为这样来说可能够他只会去缓存一些 core source,就是你想做一些 CR 的一些 resource 的一些扩展,这个我们要怎么做?
    1. 我问的是如何去扩展它的 Informer 里面的资源,而不是说你自己cache。
    2. 你自己去缓存,那如果更新了,你怎么去同步?
    3. 在你本地缓存如何去扩展
    4. core resource 会缓存,但是那个 CR 会吗?

容器

  • docker两个容器之间如何通信?

  1. 使用docker 网络
    1. 先创建一个网络(docker network create my-bridge-network)后,其他容器加入该网络。
    2. 创建容器时加入其他容器的网络
    3. 创建两个容器,默认加入bridge网络,通过容器 ip 可通信
  2. 使用 docker compose,会创建一个默认网络,可通过服务名访问
  3. 使用主机网络,A 容器映射端口到主机,B 容器通过访问主机的该端口进行通信
  • host 网络模式是通过什么样的技术手段实现?

使用宿主机的 network namespace,包括网络设备、路由表、防火墙规则、协议栈,可通过 lo 网络设备和宿主机通信。

  • 网络的 namespace 里面大概有哪些是隔离呢?比如说协议站隔离,然后路由表,然后 ARP 或者是那个 ARP 的nearby,那个 nearby 系统这些地方它都隔离吗?还有包括Netfilter、 IP tables 这些。

协议栈、路由表、网络设备、防火墙规则、网络状态

  • 那比如说容器内和容器外,它是使用什么样的一个方式来做联通?

虚拟网卡对

  • 如果比如说我不使用 iptables 的话,那么这个容器里面的 IP 能够直接通我宿主机的 IP 吗?我宿主机 IP 肯定是挂在宿主机的网卡,不管是物理的还是虚拟的其他网卡。嗯,这个场景它是直接通吗?如果不去设置任何 iptables 的话。

可以。通过虚拟网卡对-》docker 网桥-》ip 路由表-》宿主机网卡

  • 如比如说我不借助任何 NAT,那么仅靠 IP forward,我把 IP forward 设置成一,那么他去容器内去ping我宿主机一个网卡上的一个IP,这个能 ping 通吗?
  • 我容器是确实看不到,但是你不是已经在 bridge 上了吗?已经到bridge,比如说做的有能力,比如说 IP 经过 IP forward 能够通一个物理网卡上的i,一个 IP 同一个宿主机情况下。

可以。通过虚拟网卡对-》docker 网桥-》ip 路由表-》宿主机网卡

  • 如果能 ping 本机的物理网卡通的话,那么ping那个跨物理机,比如跨节点之间的,那么它能通吗?

不可以。宿主机网卡出去时,需要做 iptables SNAT,否则回不来。

  • 不需要改原 IP 或者什么的吗?
  • IPtables 它的四表 5 链
  • 你们现在那个容器的版本和内核版本是多少?那个 Linux 的内核版本
  • 你在用 cgroups 去限制内存或者限制 CPU 的时候有遇到一些问题吗?
  • 有时候去排查,比如说要进到容器的 namespace 里面去,有时候可能会用一些,比如说像 nsenter 或者一些其他的系统调用。那比如说像 nsenter 这种类似它的原理是什么呢?
  • 比如说我们容器里面发出了一些威胁的流量,那从系统的角度来说,我怎么去关联这个流量和我的PID?然后我 pid 又怎么关联上容器呢?那关联到我的 Pod 呢?
  • namespace、cgroup 这方面你有哪些了解?
  • 内存 limit 在 memory cgroup 下,是通过哪个文件指定的

Post Views: 12

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-7-13 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • K8s
  • 容器
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档