我正在尝试在 Kubernetes (Minikube) 上部署一个“Hello world”Spring Boot 应用程序。该应用程序非常简单,只有一种方法,映射到 GET 资源上。我什至没有指定端口。
我现在尝试在 Minikube 上部署该应用程序,并使用服务使其可用:
kind: Service
apiVersion: v1
metadata:
name: server
spec:
selector:
app: server
ports:
- protocol: TCP
port: 8080
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: server
spec:
selector:
matchLabels:
app: server
replicas: 3
template:
metadata:
labels:
app: server
spec:
containers:
- name: server
image: kubernetes-server:latest
imagePullPolicy: Never
ports:
- name: http
containerPort: 8080
Run Code Online (Sandbox Code Playgroud)
如果我使用此配置启动部署(即先启动服务,然后启动部署),Pod 在启动过程中会失败。在日志中,我可以找到以下消息:
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target
org.springframework.boot.autoconfigure.web.ServerProperties@42f93a98 failed: …Run Code Online (Sandbox Code Playgroud) 我是 Kubernetes 新手。我试图通过 javascript 客户端从 pod/容器内部列出命名空间中的所有 pod。
import k8s = require('@kubernetes/client-node');
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
k8sApi.listNamespacedPod('development')
.then((res) => {
console.log(res.body);
}).catch((err) => {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
当我查看 pod 日志时出现响应错误:
{ kind: 'Status',
apiVersion: 'v1',
metadata: {},
status: 'Failure',
message:
'pods is forbidden: User "system:serviceaccount:default:default" cannot list pods in the namespace "development"',
reason: 'Forbidden',
details: { kind: 'pods' },
code: 403 } }
Run Code Online (Sandbox Code Playgroud)
我相信我需要创建一个新用户或向角色添加一些权限,但我不确定在哪里以及如何创建。谢谢
如果我启动一个全新的、空的 minikube 和helm install最新stable/prometheus-operator的严格默认设置,我会看到四个活动的 Prometheus 警报。
在这个超级简化的场景中,我有一个干净的新 minikube,除了 Prometheus 之外什么都没有运行,应该没有问题,也没有警报。这些警报是假的还是坏了?我的设置有问题吗?或者我应该提交错误报告并暂时禁用这些警报?
以下是我的基本设置步骤:
minikube delete
# Any lower memory/cpu settings will experience problems
minikube start --memory 10240 --cpus 4 --kubernetes-version v1.12.2
eval $(minikube docker-env)
helm init
helm repo update
# wait a minute for Helm Tiller to start up.
helm install --name my-prom stable/prometheus-operator
Run Code Online (Sandbox Code Playgroud)
等待几分钟让一切启动,然后在 Prometheus 服务器和 Grafana 上运行端口转发:
kubectl port-forward service/my-prom-prometheus-operato-prometheus 9090:9090
kubectl port-forward service/my-prom-grafana 8080:80
Run Code Online (Sandbox Code Playgroud)
然后去http://localhost:9090/alerts看看:
DeadMansSwitch (1 active)
KubeControllerManagerDown (1 active)
KubeSchedulerDown (1 …Run Code Online (Sandbox Code Playgroud) 我昨天将 Mac 升级到版本 10.13.6,并重新启动了我的 Mac 笔记本电脑。现在,minikube 无法启动。Docker 社区版 18.06.1-ce 正在运行。日志如下。任何人都可以发现哪里出了问题。我如何进一步调试这个?
$ minikube version
minikube version: v0.30.0
$ minikube update-check
CurrentVersion: v0.30.0
LatestVersion: v0.30.0
$ minikube start --v=999 --logtostderr --vm-driver=hyperkit
W1101 12:02:25.674822 24809 root.go:146] Error reading config file at /Users/user/.minikube/config/config.json: open /Users/user/.minikube/config/config.json: no such file or directory
I1101 12:02:25.675028 24809 notify.go:121] Checking for updates...
I1101 12:02:25.971633 24809 start.go:99] Viper configuration:
Aliases:
map[string]string{}
Override:
map[string]interface {}{"v":"999"}
PFlags:
map[string]viper.FlagValue{"apiserver-names":viper.pflagValue{flag:(*pflag.Flag)(0xc42033a460)}, "network-plugin":viper.pflagValue{flag:(*pflag.Flag)(0xc42033a8c0)}, "registry-mirror":viper.pflagValue{flag:(*pflag.Flag)(0xc42033a6e0)}, "vm-driver":viper.pflagValue{flag:(*pflag.Flag)(0xc420367c20)}, "cpus":viper.pflagValue{flag:(*pflag.Flag)(0xc420367d60)}, "disk-size":viper.pflagValue{flag:(*pflag.Flag)(0xc420367e00)}, "feature-gates":viper.pflagValue{flag:(*pflag.Flag)(0xc42033a960)}, "hyperkit-vsock-ports":viper.pflagValue{flag:(*pflag.Flag)(0xc42033ac80)}, "disable-driver-mounts":viper.pflagValue{flag:(*pflag.Flag)(0xc420367ae0)}, "gpu":viper.pflagValue{flag:(*pflag.Flag)(0xc42033ad20)}, "nfs-share":viper.pflagValue{flag:(*pflag.Flag)(0xc42033a140)}, "uuid":viper.pflagValue{flag:(*pflag.Flag)(0xc42033ab40)}, "apiserver-name":viper.pflagValue{flag:(*pflag.Flag)(0xc42033a3c0)}, "cache-images":viper.pflagValue{flag:(*pflag.Flag)(0xc42033aa00)}, "xhyve-disk-driver":viper.pflagValue{flag:(*pflag.Flag)(0xc42033a0a0)}, …Run Code Online (Sandbox Code Playgroud) When I try to run kubectl apply -f 02-php-apache-deployment.yaml I get the following error:
error: error validating "02-php-apache-deployment.yaml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false
This is my Deployment yml file:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
replicas: 3
template:
metadata:
labels:
role: php-apache
spec:
containers:
- name: php-apache
image: k8s.gcr.io/hpa-example
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
env:
- name: MYSQL_ROOT_PASSWORD
value: "password" …Run Code Online (Sandbox Code Playgroud)我创建了一项名为flyman-webapp 的服务:
apiVersion: v1
kind: Service
metadata:
name: fleetman-webapp
spec:
selector:
app: webapp
ports:
- name: http
port: 80
nodePort: 30080
type: NodePort
Run Code Online (Sandbox Code Playgroud)
还有一个名为webapp的 pod :
apiVersion: v1
kind: Pod
metadata:
name: webapp
labels:
app: webapp
spec:
containers:
- name: webapp
image: richardchesterwood/k8s-fleetman-webapp-angular:release0
Run Code Online (Sandbox Code Playgroud)
我检查了minikube ip:
192.168.99.102
但是当我在浏览器中输入192.168.99.102:30080 时,webapp 无法访问:
请注意,我使用的是 Ubuntu 最新版本。我进一步验证了代理和防火墙是否处于活动状态:
猫 /etc/environment:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Run Code Online (Sandbox Code Playgroud)
iptables -L :
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP) …Run Code Online (Sandbox Code Playgroud) 上下文:
技术:Java、Docker 工具箱、Minikube。
我有一个 java web 应用程序(已经打包为 web-tool.jar),我想在运行时同时拥有 kubernetes 的所有好处。
为了指示kubernetes 在本地获取图像,我使用了图像标签:
docker build -t despot/web-tool:1.0 .
Run Code Online (Sandbox Code Playgroud)
然后通过以下方式使其可用于 minikube:
docker save despot/web-tool:1.0 | (eval $(minikube docker-env) && docker load)
Run Code Online (Sandbox Code Playgroud)
该泊坞窗文件是:
FROM openjdk:11-jre
ADD target/web-tool-1.0-SNAPSHOT.jar app.jar
EXPOSE 1111
EXPOSE 2222
Run Code Online (Sandbox Code Playgroud)
1. 我怎样才能创建 pod,运行 java 应用程序,同时有一个部署和服务引用它?
1.1. 我可以创建一个部署来在创建 pod 时传播命令和参数吗?(最适合我,因为我确保在创建 pod 之前创建部署和服务)
1.2。如果 1.1. 不可行,我可以 kubectl 将一些带有命令和参数的 pod 配置应用到已经创建的部署/pod/服务吗?(更糟糕的解决方案是额外的手动步骤)
1.3。如果 1.2. 不可行,是否可以创建部署/服务并将其附加到已经运行的 pod(以“kubectl run ... java -jar app.jar reg”开头)?
我尝试的是:
a)创建一个部署(自动启动一个 pod)并公开(创建服务):
kubectl create deployment …Run Code Online (Sandbox Code Playgroud) three services在我的本地运行一个应用程序,minikube同时安装在一个有16 个 cpu 和 64 GB 内存的服务器上,其中一个replicas是 2,我只为每个服务设置了 resources.limits,如下所示
resources:
limits:
cpu: "2"
memory: "209715200"
Run Code Online (Sandbox Code Playgroud)
所有服务资源限制都是一样的。
但是,pending出现了一些服务。
待处理的Pod描述部分输出如下
Limits:
cpu: 2
memory: 209715200
Requests:
cpu: 2
memory: 209715200
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling <unknown> default-scheduler 0/1 nodes are available: 1 Insufficient cpu.
Warning FailedScheduling <unknown> default-scheduler 0/1 nodes are available: 1 Insufficient cpu.
Run Code Online (Sandbox Code Playgroud)
结果
kubectl get pod如下
kubectl get pod …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 kubernetes 上运行 spark(使用带有 VirtualBox 或 docker 驱动程序的 minikube,我在两者中都进行了测试),现在我遇到了一个我不知道如何解决的错误。
错误是“SparkException:无法实例化外部调度程序”。我是 Kubernetes 世界的新手,所以我真的不知道这是否是一个新手错误,但是尝试自己解决我失败了。
请帮我。
在接下来的几行中,按照命令和错误进行操作。
我使用这个火花提交命令:
spark-submit --master k8s://https://192.168.99.102:8443 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=2 \
--executor-memory 1024m \
--conf spark.kubernetes.container.image=spark:latest \
local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0.jar
Run Code Online (Sandbox Code Playgroud)
我在 pod 中遇到了这个错误:
20/06/23 15:24:56 INFO SparkContext: Submitted application: Spark Pi
20/06/23 15:24:56 INFO SecurityManager: Changing view acls to: 185,luan
20/06/23 15:24:56 INFO SecurityManager: Changing modify acls to: 185,luan
20/06/23 15:24:56 INFO SecurityManager: Changing view acls groups to:
20/06/23 15:24:56 INFO SecurityManager: …Run Code Online (Sandbox Code Playgroud) 我的 Windows 10 电脑上有一个 minikube K8s 1 节点集群。我可以使用 SSH 进入这个集群minikube ssh。
我遇到的问题是我无法使用箭头键恢复上一个命令。我做了一些环顾和诊断:
set -o | grep history 给 history onecho $HISTFILE给了/home/docker/.bash_history。这确实在用户的主文件夹中,并且在再次exit执行并执行后该文件存在minikube sshecho $HISTSIZE并且echo $HISTFILESIZE都给了 500echo $SHELL 给 /bin/bash所有这些都告诉我应该启用命令历史记录,但似乎并非如此。我尝试使用 Powershell 和 cmd 来运行minikube ssh,无论有没有 Windows 终端。
PowerShell 和 cmd 本身都有可用的命令历史记录,但是一旦使用 minikube 进行 SSH 连接,bash shell 中的历史记录就不起作用了。
有谁知道如何在执行后使命令历史记录工作minikube shh?
编辑:
我试过minikube ssh --native-ssh=false,但这并没有改变任何东西。
minikube ×10
kubernetes ×9
kubectl ×2
apache-spark ×1
bash ×1
docker ×1
java ×1
prometheus ×1
spring-boot ×1
ssh ×1