我是使用库伯内特斯、Docker和GCP的新手,如果这个问题很愚蠢和(或)明显,我很抱歉。
我尝试使用谷歌示例创建带有http(s)映射的简单gRPC服务器。问题是,我的容器可以从Google cloud shell启动,没有任何问题,但部署后在Kubernetes引擎上失败。
在谷歌云控制台:
git clone https://gitlab.com/myrepos/grpc.git
cd grpc
docker build -t gcr.io/project-id/python-grpc-diagnostic-server:v1 .
# Run the container "locally"
docker run --rm -p 8000:8000 gcr.io/mproject-id/python-grpc-diagnostic-server:v1
Server is started
^CServer is stopped
# Pushing the image to Container Registry
gcloud docker -- push gcr.io/project-id/python-grpc-diagnostic-server:v1
# Deployment
kubectl create -f grpc-diagnostic.yaml
在部署详细信息'诊断'容器具有"CrashLoopBackOff"状态,并在日志中出现下一个错误:
File "/diagnostic/diagnostic_pb2.py", line 17, in <module>
from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
ModuleNotFoundError: No module named 'google.api'
你能告诉我为什么相同的容器在shell中启动,在Kubernetes引擎上失败吗?谢谢
要求。txt
grpcio
grpcio-tools
pytz
google-auth
googleapis-common-protos
文档
FROM gcr.io/google_appengine/python
# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
RUN virtualenv -p python3.6 /env
# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV -p python3.6 /env
ENV PATH /env/bin:$PATH
ADD . /diagnostic/
WORKDIR /diagnostic
RUN pip install -r requirements.txt
EXPOSE 8000
ENTRYPOINT ["python", "/diagnostic/diagnostic_server.py"]
grpc诊断。亚马尔
apiVersion: v1
kind: Service
metadata:
name: esp-grpc-diagnostic
spec:
ports:
# Port that accepts gRPC and JSON/HTTP2 requests over HTTP.
- port: 80
targetPort: 9000 # or 8000?
protocol: TCP
name: http2
selector:
app: esp-grpc-diagnostic
type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: esp-grpc-diagnostic
spec:
replicas: 1
template:
metadata:
labels:
app: esp-grpc-diagnostic
spec:
containers:
- name: esp
image: gcr.io/endpoints-release/endpoints-runtime:1
args: [
"--http2_port=9000",
"--service=diagnostic.endpoints.project-id.cloud.goog",
"--rollout_strategy=managed",
"--backend=grpc://127.0.0.1:8000"
]
ports:
- containerPort: 9000
- name: diagnostic
image: gcr.io/project-id/python-grpc-diagnostic-server:v1
ports:
- containerPort: 8000
那是我愚蠢的错误。我更改了图像,但图像的名称是相同的,所以集群继续使用旧的错误图像,认为没有任何更改。重新部署代码的正确方法是使用新标记创建图像,例如v1。01并为现有部署设置新映像,如文档中所述。我删除了服务和部署,并重新创建了它,但我没有删除集群,认为我是从零开始的。
正确的方式:
docker build -t gcr.io/project-id/python-grpc-diagnostic-server:v1.01 .
gcloud docker -- push gcr.io/project-id/python-grpc-diagnostic-server:v1.01
kubectl set image deployment/esp-grpc-diagnostic diagnostic=gcr.io/project-id/python-grpc-diagnostic-server:v1.01
另一种不更改名称的拉取更新图像的方法是更改默认设置为IfNotPresent
的ImagePullPolicy
我试图在Google Container Engine(GKE)上创建一个kubernetes NFS卷,并让部署使用它。 我在github存储库kubernetes-nfs-volume-on-gke中显示了以下几个步骤: 创建GKE集群和GCE持久化磁盘 配置kubectl处理GKE集群的上下文 创建PersistentVolume(PV)和PersistentVolumeClaim(PVC)
问题内容: 我遇到错误了; 问题答案: 错误是 看来您有一个指的是您尚未声明的。 您需要具有以下声明
问题内容: 我有一个利用Google Cloud Logging API的go应用程序。 相关代码与他们的文档中的该示例相同:https : //github.com/GoogleCloudPlatform/golang- samples/blob/master/logging/logging_quickstart/main.go 检查它是否可与minikube配合使用(我的有效负载出现在日志查看
我有一个Ubuntu Xenial容器,在我的Arch Linux计算机上安装了amd64体系结构。容器工作正常。但是,当我第二次尝试启动容器时,出现以下错误: 容器启动失败。 要获得更多详细信息,请在前台模式下运行容器。 其他信息可以通过设置--logfile和--log优先级选项获得。 是什么原因造成的? 在使用-F、-logfile和--logpriority选项运行后得到了这个。 lxc开
我们将使用IntelliJ IDEA/Android Studio来创建这个工程,因此你会对截图看起来比较熟悉。 让我们开始创建一个新的Android工程。你可以创建你自己的工程或者用本书中提供的导入。选择你自己喜欢的创建方式这取决于你。 如果你想用Android Studio创建一个新的工程,通常你可以参考官方文档:http://developer.android.com/intl/zh-cn/