配置Kubernetes中git-sync侧车容器周期性拉取失败,求助排查
问题原因与解决方案
核心问题
你把git-sync放在initContainers里,同时设置了GIT_SYNC_ONE_TIME: "false"和GIT_SYNC_PERIOD: "10"——init容器的要求是必须成功退出后,主容器才能启动,但周期性拉取模式下git-sync会一直保持运行状态,不会退出,直接导致Pod初始化流程卡住,主容器永远无法启动。
修正方案
把git-sync从initContainers移到containers列表中,作为侧车容器和主容器(nginx)一起运行,这样它就能持续周期性拉取代码到共享卷,同时不影响主容器的启动。
修正后的Deployment配置
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-helloworld image: nginx ports: - containerPort: 80 volumeMounts: - mountPath: "/usr/share/nginx/html" name: www-data # 将git-sync转为侧车容器 - name: git-sync image: k8s.gcr.io/git-sync:v3.1.3 volumeMounts: - name: www-data mountPath: /data env: - name: GIT_SYNC_REPO value: "https://github.com/musaalp/design-patterns.git" - name: GIT_SYNC_BRANCH value: "master" - name: GIT_SYNC_ROOT value: /data - name: GIT_SYNC_DEST value: "hello" - name: GIT_SYNC_PERIOD value: "600" # 10分钟=600秒,注意单位为秒,原配置的"10"是10秒 - name: GIT_SYNC_ONE_TIME value: "false" securityContext: runAsUser: 0 volumes: - name: www-data emptyDir: {}
额外说明
GIT_SYNC_PERIOD的单位是秒,若需每10分钟拉取一次,需设置为"600",原配置的"10"会导致每10秒拉取一次- 无需手动创建单独的Pod,Deployment会根据模板自动管理Pod的生命周期
- 侧车容器与主容器共享
www-data卷,git-sync拉取的代码会实时同步到nginx的静态文件目录
内容的提问来源于stack exchange,提问作者Musa
相关产品推荐
相关产品推荐

