Docker 带有minikube和metallb的nginx

Docker 带有minikube和metallb的nginx,docker,kubernetes,minikube,metallb,Docker,Kubernetes,Minikube,Metallb,您好,我正在尝试在minikube中使用自己的容器启动自己的部署。这是我的yaml文件 apiVersion: apps/v1 kind: Deployment metadata: name: wildboar-nginx-depl labels: app: services.nginx spec: replicas: 2 selector: matchLabels: app: services.nginx template: metada

您好,我正在尝试在minikube中使用自己的容器启动自己的部署。这是我的yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wildboar-nginx-depl
  labels:
    app: services.nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: services.nginx
  template:
    metadata:
      labels:
        app: services.nginx
    spec:
      containers:
        - name: wildboar-nginx-pod
          image: services.nginx
          ports:
            - containerPort: 80
            - containerPort: 443
            - containerPort: 22
          imagePullPolicy: Never
---
apiVersion: v1
kind: Service
metadata:
  name: wildboar-nginx-service
  annotations: 
    metallb.universe.tf/allow-shared-ip: wildboar-key
spec:
  type: LoadBalancer
  loadBalancerIP: 192.168.1.101 
  selector:
    app: services.nginx
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080
    - name: https
      protocol: TCP
      port: 443
      targetPort: 443
      nodePort: 30443
    - name: ssh
      protocol: TCP
      port: 22
      targetPort: 22
      nodePort: 30022
那是我的文件

FROM alpine:latest
RUN apk update && apk upgrade -U -a
RUN apk add nginx openssl openrc openssh supervisor
RUN mkdir /www/
RUN adduser -D -g 'www' www
RUN chown -R www:www /www
RUN chown -R www:www /var/lib/nginx
RUN openssl req -x509 -nodes -days 30 -newkey rsa:2048 -subj \
"/C=RU/ST=Moscow/L=Moscow/O=lchantel/CN=localhost" -keyout \
/etc/ssl/private/lchantel.key -out /etc/ssl/certs/lchantel.crt
COPY ./conf /etc/nginx/conf.d/default.conf
COPY ./nginx_conf.sh .
COPY ./supervisor.conf /etc/
RUN mkdir -p /run/nginx/
EXPOSE 80 443 22
RUN chmod 755 /nginx_conf.sh
CMD sh nginx_conf.sh
那是我的nginx_conf.sh

#!bin/sh

cp /var/lib/nginx/html/index.html /www/
rc default
rc-service sshd start
ssh-keygen -A
rc-service sshd stop
/usr/bin/supervisord -c /etc/supervisord.conf

在我成功应用yaml文件后,我陷入了CrashLoopBackOff错误:

$ kubectl get pod
NAME                                   READY   STATUS             RESTARTS   AGE
wildboar-nginx-depl-57d64f58d8-cwcnn   0/1     CrashLoopBackOff   2          40s
wildboar-nginx-depl-57d64f58d8-swmq2   0/1     CrashLoopBackOff   2          40s
我试图重新启动,但没有用。我试图描述pod,但信息没有帮助:

$ kubectl describe pod wildboar-nginx-depl-57d64f58d8-cwcnn
Name:         wildboar-nginx-depl-57d64f58d8-cwcnn
Namespace:    default
Priority:     0
Node:         minikube/192.168.99.100
Start Time:   Sun, 06 Dec 2020 17:49:19 +0300
Labels:       app=services.nginx
              pod-template-hash=57d64f58d8
Annotations:  <none>
Status:       Running
IP:           172.17.0.7
IPs:
  IP:           172.17.0.7
Controlled By:  ReplicaSet/wildboar-nginx-depl-57d64f58d8
Containers:
  wildboar-nginx-pod:
    Container ID:   docker://6bd4ab3b08703293697d401e355d74d1ab09f938eb23b335c92ffbd2f8f26706
    Image:          services.nginx
    Image ID:       docker://sha256:a62f240db119e727935f072686797f5e129ca44cd1a5f950e5cf606c9c7510b8
    Ports:          80/TCP, 443/TCP, 22/TCP
    Host Ports:     0/TCP, 0/TCP, 0/TCP
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Sun, 06 Dec 2020 17:52:13 +0300
      Finished:     Sun, 06 Dec 2020 17:52:15 +0300
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Sun, 06 Dec 2020 17:50:51 +0300
      Finished:     Sun, 06 Dec 2020 17:50:53 +0300
    Ready:          False
    Restart Count:  5
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-hr82j (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  default-token-hr82j:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-hr82j
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  3m9s                                    Successfully assigned default/wildboar-nginx-depl-57d64f58d8-cwcnn to minikube
  Normal   Pulled     98s (x5 over 3m9s)   kubelet, minikube  Container image "services.nginx" already present on machine
  Normal   Created    98s (x5 over 3m9s)   kubelet, minikube  Created container wildboar-nginx-pod
  Normal   Started    98s (x5 over 3m9s)   kubelet, minikube  Started container wildboar-nginx-pod
  Warning  BackOff    59s (x10 over 3m4s)  kubelet, minikube  Back-off restarting failed container
$kubectl描述pod wildboar-nginx-depl-57d64f58d8-cwcnn
名称:wildboar-nginx-depl-57d64f58d8-cwcnn
名称空间:默认值
优先级:0
节点:minikube/192.168.99.100
开始时间:2020年12月6日星期日17:49:19+0300
标签:app=services.nginx
pod模板哈希=57d64f58d8
注释:
状态:正在运行
IP:172.17.0.7
IPs:
IP:172.17.0.7
控制人:ReplicaSet/wildboar-nginx-depl-57d64f58d8
容器:
野猪nginx吊舱:
容器ID:docker://6bd4ab3b08703293697d401e355d74d1ab09f938eb23b335c92ffbd2f8f26706
图片:services.nginx
图像ID:docker://sha256:a62f240db119e727935f072686797f5e129ca44cd1a5f950e5cf606c9c7510b8
端口:80/TCP、443/TCP、22/TCP
主机端口:0/TCP、0/TCP、0/TCP
国家:终止
原因:已完成
退出代码:0
开始时间:太阳,2020年12月6日17:52:13+0300
完成时间:太阳,2020年12月6日17:52:15+0300
最后状态:终止
原因:已完成
退出代码:0
开始时间:太阳,2020年12月6日17:50:51+0300
完成时间:太阳,2020年12月6日17:50:53+0300
就绪:错误
重新启动计数:5
环境:
挂载:
/来自default-token-hr82j(ro)的var/run/secrets/kubernetes.io/serviceCount
条件:
类型状态
初始化为True
准备错误
集装箱准备好了吗
播客预定为真
卷数:
default-token-hr82j:
类型:Secret(由Secret填充的卷)
SecretName:default-token-hr82j
可选:false
QoS等级:最佳努力
节点选择器:
容差:node.kubernetes.io/未就绪:NoExecute op=存在300秒
node.kubernetes.io/unreachable:NoExecute op=存在300秒
活动:
从消息中键入原因年龄
----     ------     ----                 ----               -------
正常计划的3M9已成功将默认/wildboar-nginx-depl-57d64f58d8-cwcnn分配给minikube
机器上已存在正常的98秒(x5比3m9秒)kubelet、minikube容器映像“services.nginx”
正常创建98s(x5大于3m9)kubelet,minikube创建容器野猪nginx吊舱
正常启动98s(x5超过3m9s)kubelet,minikube启动集装箱野猪nginx吊舱
警告后退59s(x10/3m4s)kubelet,minikube后退重新启动失败的容器

我想不出该怎么办:(

我用nginx解决了这个问题。首先,我重写了supervisor.conf,现在它是这样的:

[supervisord]
nodaemon=true
user = root

[program:nginx]
command=nginx -g 'daemon off;'
autostart=true
autorestart=true
startsecs=0
redirect_stderr=true

[program:ssh]
command=/usr/sbin/sshd -D
autostart=true
autorestart=true
第二,我遇到了loadBalancer的问题。我在文件中交换了服务和部署配置,还为下一个服务添加了stat spec.externalTrafficPolicy:Cluster(用于ip地址共享)

第三次我重建了minikube,所有的配置都是这样的脚本

#!/bin/bash

kubectl ns default
kubectl delete deployment --all
kubectl delete service --all
kubectl ns metallb-system
kubectl delete configmap --all
kubectl ns default
docker rmi -f <your_custom_docker_image>
minikube stop
minikube delete 
minikube start --driver=virtualbox --disk-size='<your size>mb' --memory='<your_size>mb'
minikube addons enable metallb
eval $(minikube docker-env)
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
# next line is only when you use mettallb for first time
#kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
docker build -t <your_custom_docker_images> .
kubectl apply -f <mettalb_yaml_config>.yaml
kubectl apply -f <your_config_with_deployment_and_service>.yaml
!/bin/bash
kubectl ns违约
kubectl删除部署--全部
kubectl删除服务--全部
kubectl ns金属LB系统
kubectl删除配置映射--全部
kubectl ns违约
docker rmi-f
minikube站
minikube删除
minikube启动--driver=virtualbox--disk size='mb'--memory='mb'
minikube插件支持metallb
估价$(minikube docker环境)
kubectl应用-fhttps://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl应用-fhttps://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
#下一行仅当您第一次使用mettallb时
#kubectl create secret generic-n metallib system memberlist--from literal=secretkey=“$(openssl rand-base64 128)”
docker build-t。
kubectl应用-f.yaml
kubectl应用-f.yaml

我还提到,yaml文件对空格和制表符非常敏感,因此我安装了Yamlint用于yaml文件的基本调试。我要感谢困惑的genius和David Maze提供的帮助!

查看pod的
kubectl日志
;尝试
docker在没有Kubernetes的普通docker上运行相同的容器;删除不必要的来自映像的部分(supervisord、sshd;仅运行nginx,并作为前台进程)所以调试更简单。我试着用supervisord、sshd和nginx本身运行它,它可以运行
docker run-p80:80-p443:433-p22:22--name test proj.nginx:latest
,但pod仍然一直重新启动。我用
kubectl日志检查pod
,它输出pod在nginx_config.sh中运行除supervi之外的所有东西sor…如果您添加到容器规范
命令:['nginx','-g',daemon off;']
?您会错过容器中的ssh守护程序吗(您仍然可以在不太可能的情况下使用
kubectl exec
,您需要一个调试shell)?我认为“supervisor.conf”的内容中有一些东西,因为pod正在进入完成状态。@confusedgenius,你是对的。首先,我没有在Dockerfile中正确复制supervisor.conf:它应该是
copy./supervisor.conf/etc/supervisord.conf
,但我有
copy./supervisor.conf/etc/
。Docker映像和容器现在可以正常工作,但pod仍然重新启动consta即使是
kubectl日志
也没有显示任何内容。现在,我正试图一步一步地编写它,而不使用supervisor和ssh密钥,但只使用简单的nginx,正如davidmaze所说
#!/bin/bash

kubectl ns default
kubectl delete deployment --all
kubectl delete service --all
kubectl ns metallb-system
kubectl delete configmap --all
kubectl ns default
docker rmi -f <your_custom_docker_image>
minikube stop
minikube delete 
minikube start --driver=virtualbox --disk-size='<your size>mb' --memory='<your_size>mb'
minikube addons enable metallb
eval $(minikube docker-env)
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
# next line is only when you use mettallb for first time
#kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
docker build -t <your_custom_docker_images> .
kubectl apply -f <mettalb_yaml_config>.yaml
kubectl apply -f <your_config_with_deployment_and_service>.yaml