开发 Tips(16)

2023年 1月 4日 31.8k 0

主要记录最近遇到的一些开发问题,解决方法。

1. Kubernetes 服务仅在负载节点可用

正常情况下 NodePort 类型的 Service ,任意 Node 节点 IP + 端口,都可以访问。但是,也有可能仅负载的 Node 节点 IP + 端口可以访问。首先,可以尝试配置转发相关参数:

1
2
3
4
5
6
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
1
sysctl --system

另外一种可能是防火墙,没有豁免 IPENCAP 协议:Calico 网络插件,有两种模式 BGP 、IPIP。使用 IPIP 模式时,需要在防火墙中,开启 IPENCAP 协议。

2. /var/lib/docker 目录迁移或扩容

  • 停止相关服务,保证数据一致性
1
service docker stop
  • 备份数据
1
mv /var/lib/docker /var/lib/docker_bk
  • 迁移数据
1
2
3
4
mkdir -p /data/docker/
rsync -avz /var/lib/docker_bk/ /data/docker/
du -h --max-depth=0 /data/docker
ln -s /data/docker /var/lib/docker
  • 重启相关服务
1
service docker start

3. kubectl 获取全部使用的镜像

1
kubectl  get pod --all-namespaces -o=jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{range .spec.initContainers[*]}{.image}{"\n"}{end}{end}' | sort -u

4. 使用 Telepresence 远程调用 Kubernetes

Telepresence 是 CNCF 基金会下的一个项目。它的工作原理是在本地和 Kubernetes 集群之间,搭建一个透明的双向代理。使用 Telepresence 可以实现的功能:

  • 本地的服务就可以完整的访问到远程集群中的其他服务。
  • 本地的服务直接访问到 Kubernetes 里的各种资源,包括环境变量、Secrets、ConfigMap 等。
  • 集群直接访问到本地暴露出来的接口。
  • kubectl 安装配置。
  • 在本地,安装并配置 kubectl ,使其可以正常访问 Kubernetes 集群。

  • 安装 Telepresence
  • 1
    2
    
    brew cask install osxfuse
    brew install datawire/blackbird/telepresence
    
  • 本地连通远程分支
  • 1
    
    telepresence
    
  • 本地访问远程集群服务
  • 找到服务域名:

    1
    
    kubectl get svc
    
    1
    2
    3
    
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    kubernetes   ClusterIP   10.233.0.1     <none>        443/TCP    2h
    myservice    ClusterIP   10.233.4.163   <none>        8000/TCP   2m
    

    打开本地任意 Console ,即可直接访问集群内部服务:

    1
    
    curl http://myservice:8000
    
    1
    
    Hello, world!
    
  • 远程集群访问本地服务
  • 远程集群通过端口 8000 ,访问本地 8080 端口服务,有两种方式:

    • 新建 Deployment
    1
    
    telepresence --new-deployment new_deploy_name --expose 8080:8000
    
    • 替换已经存在的 Deployment
    1
    
    telepresence --swap-deployment existed_deploy_name --expose 8080:8000
    

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论