通过设置两个豆荚来学习Kubernetes,每个豆荚分别运行一个弹性搜索和一个kibana容器。
我的配置文件能够设置两个POD,以及创建两个服务来访问主机的web浏览器上的这些应用程序。
问题是我不知道如何使Kibana容器与ES应用程序/POD通信。
我发现一个博客建议使用deployment
而不是pod
。再一次不知道如何让Kibana和ES说话
Kubernetes配置YAML:
apiVersion: v1
kind: Pod
metadata:
name: pod-elasticsearch
labels:
app: myapp
spec:
hostname: "es01-docker-local"
containers:
- name: myelasticsearch-container
image: myelasticsearch
imagePullPolicy: Never
volumeMounts:
- name: my-volume
mountPath: /home/newuser
volumes:
- name: my-volume
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: myelasticsearch-service
spec:
type: NodePort
ports:
- targetPort: 9200
port: 9200
nodePort: 30015
selector:
app: myapp
---
apiVersion: v1
kind: Pod
metadata:
name: pod-kibana
labels:
app: myapp
spec:
containers:
- name: mykibana-container
image: mykibana
imagePullPolicy: Never
volumeMounts:
- name: my-volume
mountPath: /home/newuser
volumes:
- name: my-volume
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: mykibana-service
spec:
type: NodePort
ports:
- targetPort: 5601
port: 5601
nodePort: 30016
selector:
app: myapp
下面是我试图在Kubernetes上复制的docker-compose以供参考
version: "2.2"
services:
elasticsearch:
image: myelasticsearch
container_name: myelasticsearch-container
restart: always
hostname: 'es01.docker.local'
ports:
- '9200:9200'
- '9300:9300'
volumes:
- myVolume:/home/newuser/
environment:
- discovery.type=single-node
kibana:
depends_on:
- elasticsearch
image: mykibana
container_name: mykibana-container
restart: always
ports:
- '5601:5601'
volumes:
- myVolume:/home/newuser/
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
volumes:
myVolume:
networks:
myNetwork:
ES吊舱描述:
% kubectl describe pod/pod-elasticsearch
Name: pod-elasticsearch
Namespace: default
Priority: 0
Node: docker-desktop/192.168.65.3
Start Time: Sun, 10 Jan 2021 23:06:18 -0800
Labels: app=myapp
Annotations: <none>
Status: Running
IP: 10.x.0.yy
IPs:
IP: 10.x.0.yy
在kubernetes pod/deployment/daemonset中...在同一集群中,由于其具有扁平的网络结构,因此可以很好地进行通信,其中一种方式是通过每个资源的Kubernetes服务来直接调用彼此。例如,集群中的任何资源都可以直接通过服务名称调用kibana-app,您将其赋予它mykibana-service.name-of-namespace。
因此,为了让kibana pod与elasticsearch通信,它可以使用http://name-of-service-of-elasticSearch.name-of-namespace:9200
,如果您没有指定创建服务的位置,则namespace是默认的=>http://name-of-service-of-elasticSearch.default:9200
或http://name-of-service-of-elasticSearch:9200
对于这些资源之间的通信来说,您所关心的必须创建的资源类型(pod、部署、daemonset或statefulSet)并不重要。
如果在将docker-compose转换为清单html" target="_blank">文件时遇到问题,可以从Kompose开始,您可以执行Kompose convert
docker-compose在哪里。
此处示例
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: elasticsearch
name: elasticsearch
namespace: default
spec:
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- image: myelasticsearch:yourtag #fix this
name: elasticsearch
ports:
- containerPort: 9200
- containerPort: 9300
volumeMounts:
- mountPath: /home/newuser/
name: my-volume
volumes:
- name: my-volume
emptyDir: {} # I wouldnt use emptydir
---
apiVersion: v1
kind: Service
metadata:
labels:
app: elasticsearch
name: elasticsearch
namespace: default
spec:
ports:
- port: 9200
name: "9200"
targetPort: 9200
- port: 9300
name: "9300"
targetPort: 9300
selector:
app: elasticsearch
type: ClusterIP #you dont need to make expose your service publicly
#####################################
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: kibana
name: kibana
namespace: default
spec:
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
containers:
- env:
- name: ELASTICSEARCH_URL
value: http://elasticsearch:9200/ #elasticsearch is the same name as service resrouce name
- name: ELASTICSEARCH_HOSTS
value: http://elasticsearch:9200
image: mykibana:yourtagname #fix this
name: kibana
---
apiVersion: v1
kind: Service
metadata:
labels:
app: kibana
name: kibana
namespace: default
spec:
ports:
- port: 5601
protocol: TCP
targetPort: 5601
selector:
app: kibana
type: NodePort
可以使用普罗米修斯跟踪容器的内存和cpu资源。但我们可以跟踪容器的I/O吗?有度量单位吗?
但不知何故,豆荚卡在“容器创建”的状态,当我运行docker图像时,我看不到nginx图像被拉出。通常nginx图像没有那么大,所以现在必须已经拉了(15分钟)。kubectl description pods给出了pod沙箱创建失败的错误,kubernetes将重新创建它。 我搜索了关于这个问题的所有内容,并尝试了stackoverflow上的解决方案(重新启动以重新启动集群,搜索描述豆荚,新的
我有一个后端nodeJS应用程序运行在kubernetes集群。现在我想运行两个cron作业计划每个月。cron作业在一个JS文件中。如何使用库伯内特斯创建一个作业,在每个月运行该服务的pod中运行这些JS文件? 此链接提供了对其工作原理的基本理解,但我对如何为特定服务和特定Pod运行它有点困惑 https://kubernetes.io/docs/concepts/workloads/contr
我的一个微服务正在Kubernetes上运行。我想指定到K8s负载均衡器当一个吊舱是繁忙的,因为行为,我得到目前是不确定的。 一个例子: 我有8个豆荚运行,每个豆荚一次可以处理1个请求。每个请求占用分配给pod的CPU核心的70%到100%。但是当我向我的应用程序发送8个请求时,Kubernetes不会将这些请求分派到8个吊舱,而是尝试只使用一个。由于我(通过threadpool)阻止每个应用程序
我在3台裸机Centos7服务器上设置了一个Kubernetes集群,其中有一个主服务器和两个从服务器。为此,我使用了kubeadm,遵循以下指南:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/并将Weave Net用于pod网络。 为了进行测试,我设置了2个带有服务的default-http-backend
我已经在节点(node1)上的pod(pod1)上部署了一个Spring Boot应用程序。我还在不同节点(node2)上的另一个pod(pod2)上部署了JMeter。我试图从POD2执行自动负载测试。为了执行负载测试,我要求为每个测试用例重新启动pod1。如何从POD2重新启动pod1?