标签: coreos

为什么我的 kubernetes 服务找不到端点?

我在 coreos 上运行 kubernetes 集群。

我有一个运行良好的 kubernetes 复制控制器。它看起来像这样:

id: "redis-controller"
kind: "ReplicationController"
apiVersion: "v1beta3"
metadata:
  name: "rediscontroller"
  lables:
    name: "rediscontroller"
spec:
  replicas: 1
  selector:
    name: "rediscontroller"
  template:
    metadata:
      labels:
        name: "rediscontroller"
    spec:
      containers:
        - name: "rediscontroller"
          image: "redis:3.0.2"
          ports:
            - name: "redisport"
              hostPort: 6379
              containerPort:  6379
              protocol: "TCP"
Run Code Online (Sandbox Code Playgroud)

但是我为上述复制控制器的 pod 提供了一个服务,如下所示:

id: "redis-service"
kind: "Service"
apiVersion: "v1beta3"
metadata:
  name: "redisservice"
spec:
  ports:
    - protocol: "TCP"
      port: 6379
      targetPort: 6379
  selector:
    name: "redissrv"
  createExternalLoadBalancer: true
  sessionAffinity: "ClientIP"
Run Code Online (Sandbox Code Playgroud)

kube-proxy 的日志对服务有这样的说法:

Jul 06 …
Run Code Online (Sandbox Code Playgroud)

proxy docker coreos kubernetes

4
推荐指数
3
解决办法
2万
查看次数

Kubernetes 仪表板一直处于挂起状态,并显示消息:没有可用于服务“kubernetes-dashboard”的端点

嘿嘿,我需要一些帮助来让仪表板正常工作。我的仪表板 Pod 的状态为“待处理”,如果我对http://127.0.0.1:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard进行curl 调用,则会得到以下结果:

“没有可用于服务\“kubernetes-dashboard\”的端点”

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "no endpoints available for service \"kubernetes-dashboard\"",
  "reason": "ServiceUnavailable",
  "code": 503
}
Run Code Online (Sandbox Code Playgroud)

所有吊舱

core@helena-coreos ~ $ ./kubectl get po --namespace=kube-system
NAME                                     READY     STATUS    RESTARTS   AGE
kube-apiserver-146.185.128.27            1/1       Running   0          5d
kube-apiserver-37.139.31.151             1/1       Running   0          7d
kube-controller-manager-146.185.128.27   1/1       Running   0          19h
kube-controller-manager-37.139.31.151    1/1       Running   0          16h
kube-dns-v11-ika0m                       0/4       Pending   0          19h
kube-proxy-146.185.128.27                1/1       Running   0          5d
kubernetes-dashboard-1775839595-1h0lt    0/1       Pending   0          19h
Run Code Online (Sandbox Code Playgroud)

描述 Pod:

core@helena-coreos ~ …
Run Code Online (Sandbox Code Playgroud)

coreos kubernetes

4
推荐指数
1
解决办法
1万
查看次数

如何从 CoreOS 上的 docker 镜像中的快照恢复 etcd 集群?

我有一个 Kubernetes 集群(v1.5.6),在 vmware 上有 3 个节点的 etcd 集群(etcd 版本 3.1.5)。此 etcd 节点在 vmware 上的 coreos 上的三个 docker 容器(在三个主机上)中运行。

我尝试使用以下解决方案备份 etcd:

docker run --rm --net=host -v /tmp:/etcd_backup -e ETCDCTL_API=3 quay.io/coreos/etcd:v3.1.5 etcdctl --endpoints=[1.1.1.1:2379,2.2.2.2:2379,3.3.3.3:2379] snapshot save etcd_backup/snapshot.db
Run Code Online (Sandbox Code Playgroud)

备份已成功完成。

我想在另一个 vmware 环境中从零开始创建这个 kubernetes 集群,但我需要为此从快照恢复 etcd。

到目前为止,我还没有找到适用于 docker 容器中的 etcd 的正确解决方案。

我尝试使用以下方法恢复,但不幸的是我没有成功。

首先,我在运行以下命令后创建了一个新的 etcd 节点:

docker run --rm --net=host -v /tmp/etcd_bak:/etcd_backup -e ETCDCTL_API=3 registry:5000/quay.io/coreos/etcd:v3.1.5 etcdctl snapshot restore etcd_backup/snapshot.db --name etcd0 --initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://etcd0:2380
Run Code Online (Sandbox Code Playgroud)

结果:

2018-06-04 09:25:52.314747 I | etcdserver/membership: added member …
Run Code Online (Sandbox Code Playgroud)

docker coreos etcd kubernetes

4
推荐指数
1
解决办法
5204
查看次数

管理来自另一个容器的容器docker

我需要能够部署一个新容器或管理另一个正在运行的Docker容器在CoreOS中运行的Docker容器。

docker版本是1.5.0 coreos版本是647.2.0

现在,我用于部署应用程序新实例的过程是使用Shell脚本。

它基本上可以做到:

  1. 将node.js应用程序的源代码复制到新文件夹中
  2. CD进入
  3. 在分离模式下将“ pwd”设置为-v到工作目录中部署一个新的Docker容器,然后该应用程序运行

我在想,是否有可能从容器内部执行shell脚本,以便它在coreos中部署新的容器,或者该方法是否有替代方法。

另一个目标是能够停止正在运行的容器。

任何意见或建议,将不胜感激。

multi-tenant docker coreos

3
推荐指数
1
解决办法
1720
查看次数

如何在CoreOS安装上自定义bashrc,bash_profile或profile?

我完全意识到CoreOS主要是不可变的,所以在用户空间中没有安装任何东西.对于99%的用例,我同意.当我需要完成一些实际的工作时,我正在使用CoreOS /工具箱,但我还需要稍微更新用户环境,以便我可以正确地使用Docker-ify我的开发环境.

coreos

3
推荐指数
1
解决办法
3088
查看次数

我如何用etcd进行原子更新

我试图了解在etcd上的“原子”更新是什么。

当我认为“原子”时,我认为有一个“之前”和“之后”(没有“期间”,并且如果更新失败,则仍然是“之前”)。

这是一个例子:

curl -s -XPUT http://localhost:2379/v2/keys/message -d value='Hidee Ho'
Run Code Online (Sandbox Code Playgroud)

因此,在这一点上,任何人都可以访问该消息并获取当前值:

curl -s http://localhost:2379/v2/keys/message
{"action":"get","node":{"key":"/message","value":"Hidee Ho","modifiedIndex":4748,"createdIndex":4748}}
Run Code Online (Sandbox Code Playgroud)

稍后,我可以修改该值,如下所示:

curl -s -XPUT http://localhost:2379/v2/keys/message -d value='Mr Hanky'
Run Code Online (Sandbox Code Playgroud)

结果可以像以前一样获取。更改之前,值“ Hidee Ho”回来,更改之后,值“ Mr Hanky”回来。所以,我的问题是我可以保证其中一个或另一个结果吗?也就是说,我想确认一个或另一个将被返回(而不是结果之间nil值)。

我并不特别在意时间。如果我进行Hanky先生更新,并且随后的值获取程序继续在短时间内获得Hidee Ho,那就可以了。

我很困惑,因为协议中有一个Atomic CompareAndSwap函数。据我所知,它不是原子的,而是“仅当值是我所说的时才进行更新”。就我而言,我并不在乎过去的价值。我只想知道它已更改,除了“ before”或“ after”值之外,没有其他读者会看到。

coreos raft etcd

3
推荐指数
1
解决办法
1992
查看次数

Kubernetes:将pod连接到kube-proxy

据我了解,kube-proxy在每个Kubernetes节点上运行(它在Master和Worker节点上启动)

如果我理解正确,它也是访问API的"推荐"方式(请参阅:https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/accessing-the-cluster. md#access-the-api-from-a-pod)

那么,既然kube-proxy已经在每个节点上运行,那么"推荐"的方式是用一个新的kube-proxy容器启动每个pod,还是可以以某种方式"链接"到正在运行的kube-proxy容器?

最初我在$ GUB上使用带有$ KUBERNETES_SERVICE_HOST的URL和作为Secret传递的凭据,调用

curl https://$USER:$PASSWORD@${KUBERNETES_SERVICE_HOST}/api/v1/namespaces/${NAMESPACE}/endpoints/${SELECTOR}
Run Code Online (Sandbox Code Playgroud)

并解析结果,但在部署在CoreOS集群上的K8上,我似乎只能通过TLS和证书进行身份验证,而链接代理似乎是一种更好的方式.

所以,我正在寻找从pod连接到API以查找服务引用的另一个pod的IP的最有效/最简单的方法.

有什么建议/意见吗?

coreos kubernetes

3
推荐指数
1
解决办法
2215
查看次数

Kubernetes简单认证

我在DigitalOcean上托管的coreOs集群上使用KUbernetes.并使用 repo进行设置.我使用以下行启动apiserver:

/opt/bin/kube-apiserver --runtime-config=api/v1 --allow-privileged=true \ --insecure-bind-address=0.0.0.0 --insecure-port=8080 \ --secure-port=6443 --etcd-servers=http://127.0.0.1:2379 \ --logtostderr=true --advertise-address=${COREOS_PRIVATE_IPV4} \ --service-cluster-ip-range=10.100.0.0/16 --bind-address=0.0.0.0

问题是它接受任何人的请求!我希望能够提供简单的用户/密码身份验证.我一直在读这个这个似乎我必须做类似下面的事情,但是我不能长时间地关闭集群,所以我需要你的帮助这个.Btw,mt pods不要创建另一个pod,所以我只需要一些用户,比如1/2 for devs和1 for CI.

我正在考虑做一些类似于包括授权模式和授权策略文件标志的东西,因为它似乎需要并使insecure-bind-address localhost使其仅在本地可用.我错过了什么?

/opt/bin/kube-apiserver --runtime-config=api/v1 --allow-privileged=true \ --authorization-mode=ABAC --authorization-policy-file=/access.json \ --insecure-bind-address=127.0.0.1 --insecure-port=8080 \ --secure-port=6443 --etcd-servers=http://127.0.0.1:2379 \ --logtostderr=true --advertise-address=${COREOS_PRIVATE_IPV4} \ --service-cluster-ip-range=10.100.0.0/16 --bind-address=0.0.0.0

/access.json

{"user":"admin"} {"user":"wercker"} {"user":"dev1"} {"user":"dev2"}

但是密码在哪里?如何使用kubectl和curl或httpie实际发出请求?

digital-ocean coreos kubernetes

3
推荐指数
1
解决办法
7380
查看次数

Kubectl可以记住我吗?

我已经在我的kubernetes api-server上实现了基本身份验证,现在我尝试以./kube/config一种我可以简单运行的方式配置我的文件,kubectl get pods

 kubectl config set-cluster digitalocean \
                      --server=https://SERVER:6443 \
                      --insecure-skip-tls-verify=true \
                      --api-version="v1" 
 kubectl config set-context digitalocean --cluster=digitalocean --user=admin
 kubectl config set-credentials admin --password="PASSWORD" 
 kubectl config use-context digitalocean
Run Code Online (Sandbox Code Playgroud)

但现在,它要求两次凭证:

dev@desktop: ~/code/go/src/bitbucket.org/cescoferraro                                                                   
$ kubectl get pods                                                                                                      
Please enter Username: admin                                                                                             
enter Password: PASSWORD
Please enter Username: admin                                                                                            
Please enter Password: PASSWORD                                                                                      
NAME                                                READY     STATUS    RESTARTS   AGE 
Run Code Online (Sandbox Code Playgroud)

或者我需要传递旗帜

kubectl get pods --username=admin --password=PASSWORD
Run Code Online (Sandbox Code Playgroud)

这是默认行为吗?我希望我的配置能够了解我.我能做什么?

digital-ocean coreos kubernetes

3
推荐指数
1
解决办法
1956
查看次数

“ kubectl exec”导致“错误:无法升级连接:未经授权”

kubectl exec在启用了k8s 1.6.4 RBAC的群集上进行了尝试,返回的错误是:error: unable to upgrade connection: Unauthorizeddocker exec在同一容器上成功。否则,kubectl正在工作。kubectl通过SSH连接建立隧道,但我认为这不是问题。

已启用kubelet身份验证,但未启用authz。该文档说的authz是AlwaysAllow默认情况下,所以我离开了这种方式。

我感觉它类似于这个问题。但是错误消息有点不同。

提前致谢!

kubectl exec命令的详细日志:

I0614 16:50:11.003677   64104 round_trippers.go:398] curl -k -v -XPOST  -H "X-Stream-Protocol-Version: v4.channel.k8s.io" -H "X-Stream-Protocol-Version: v3.channel.k8s.io" -H "X-Stream-Protocol-Version: v2.channel.k8s.io" -H "X-Stream-Protocol-Version: channel.k8s.io" https://localhost:6443/api/v1/namespaces/monitoring/pods/alertmanager-main-0/exec?command=%2Fbin%2Fls&container=alertmanager&container=alertmanager&stderr=true&stdout=true
I0614 16:50:11.003705   64104 round_trippers.go:398] curl -k -v -XPOST  -H "X-Stream-Protocol-Version: v4.channel.k8s.io" -H "X-Stream-Protocol-Version: v3.channel.k8s.io" -H "X-Stream-Protocol-Version: v2.channel.k8s.io" -H "X-Stream-Protocol-Version: channel.k8s.io" -H "User-Agent: kubectl/v1.6.4 (darwin/amd64) kubernetes/d6f4332" https://localhost:6443/api/v1/namespaces/monitoring/pods/alertmanager-main-0/exec?command=%2Fbin%2Fls&container=alertmanager&container=alertmanager&stderr=true&stdout=true
I0614 16:50:11.169474 …
Run Code Online (Sandbox Code Playgroud)

docker coreos kubernetes

3
推荐指数
1
解决办法
7178
查看次数

标签 统计

coreos ×10

kubernetes ×7

docker ×4

digital-ocean ×2

etcd ×2

multi-tenant ×1

proxy ×1

raft ×1