主要记录最近遇到的一些开发问题,解决方法。
1. 本地快速切换不同 Kubernetes 环境
涉及 Kubernetes 相关开发时,经常需要在多个集群之间切换。配置多集群 context 是一个选择,但是如果集群在不断重置,可以试下如下方法:
在 ~/.profile
文件中定义一系列相关 function
,切换时只需要执行 on_cluster_name
即可。
1
2
3
4
5
6
7
8
9
10
11
12
|
function on_kubernetes() {
# 10.10.10.10 kubernetes.default
if test -f ~/.kube/config.bk; then
rm -rf ~/.kube/config.bk
fi
if test -f ~/.kube/config; then
mv ~/.kube/config ~/.kube/config.bk
fi
sed -i'.s' -e '/kubernetes.default/d' ~/.ssh/known_hosts
sshpass -p "YourPassword" ssh -o StrictHostKeyChecking=no [email protected] "cat /etc/kubernetes/admin.conf" > ~/.kube/config
sed -i'.s' -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}'/kubernetes.default/ ~/.kube/config
}
|
2. OS X 上,执行 git
命令报错,xcrun: error
升级最新版本 OS X 之后,执行 git pull
命令,提示错误:
1
2
3
4
|
git pull
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
|
需要安装 Xcode toolkit :
如果依然报错,可以尝试重置:
1
|
sudo xcode-select --reset
|
3. Dockerfile 多个 From 指令
多个 From 指令生成的镜像,以最后一个 From 为准。
多个 From 指令是为了区分不同构建阶段,比如,构建与运行环境的分离。例如:
1
2
3
4
5
6
7
8
9
10
11
|
FROM golang:1.12 as controller-manager-builder
COPY / /go/src/myapp
WORKDIR /go/src/myapp
RUN CGO_ENABLED=0 GO111MODULE=on GOOS=linux GOARCH=amd64 GOFLAGS=-mod=vendor go build --ldflags "-extldflags -static" -o controller-manager ./cmd/controller-manager/
FROM alpine:3.7
RUN apk add --update ca-certificates && update-ca-certificates
COPY --from=controller-manager-builder /go/src/myapp/controller-manager /usr/local/bin/
CMD controller-manager
|
golang 镜像用于构建源码,alpine 镜像用于运行程序,两者的关联在于 COPY --from=
将二进制从一个镜像拷贝到另外一个镜像。
4. 给 Pod 附加容器,调试 Kubernetes 运行环境
在 Service Mesh 中,为了减少对原有系统的干扰,推荐采用 Sidecar 模式进行设计和实践。Sidecar 设计模式可以给应用程序添加新的功能,而无需额外第三方组件的配置和代码。
借助 Sidecar ,可以对运行中的容器或未运行的容器环境进行处理,解决一些运维问题。
第一步,添加 Sidecar 容器,共享存储、网络等
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Containers:
- name: sidecar
image: busybox:1.28.4
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- name: db-persistent-storage
mountPath: /var/lib/mysql
|
第二步,进入 Sidecar 容器解决运维故障
1
|
kubectl exec -it {POD_NAME} -c sidecar sh
|
参考,Istio Sidecar 注入:例外和除错。