Please enable Javascript to view the contents

开发 Tips(16)

 ·  ☕ 2 分钟

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

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 等。
  • 集群直接访问到本地暴露出来的接口。
  1. kubectl 安装配置。

在本地,安装并配置 kubectl ,使其可以正常访问 Kubernetes 集群。

  1. 安装 Telepresence
1
2
brew cask install osxfuse
brew install datawire/blackbird/telepresence
  1. 本地连通远程分支
1
telepresence
  1. 本地访问远程集群服务

找到服务域名:

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!
  1. 远程集群访问本地服务

远程集群通过端口 8000 ,访问本地 8080 端口服务,有两种方式:

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

微信公众号
作者
微信公众号