我对linux容器的理解是每个容器使用相同的主机内核,容器上的任何安装都只是主机上的隔离文件系统层.
我正在通过coreos入门指南.其中显示了如何在包含coreos的主机上启动ubuntu容器.
这怎么可能 ?主机和容器如何具有不同的口味?
谢谢,穆尔塔扎
嘿大家,
也许是一个非常愚蠢的问题,但我有一个在集群节点之间具有 SSL 的 CoreOS 集群。我已经在我的云配置中设置了舰队和etcd。
fletctl 工作得很好。我不必提供任何证书,但是当我使用 etcdctl 时,我被迫提供如下所示的证书路径:
etcdctl --ca-file /home/core/etcd/certificates/ca.pem --cert-file /home/core/etcd/certificates/coreos.pem --key-file /home/core/etcd/certificates/coreos-key.pem --endpoint "https://10.129.1.226:2379" get /test/key
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以配置 etcd2,使 etcdctl 不需要每次都需要证书路径,例如:
etcdctl get /test/key
Run Code Online (Sandbox Code Playgroud)
我的云配置的一部分:
write_files:
# tell etcd2 and fleet where our certificates are going to live:
- path: /run/systemd/system/etcd2.service.d/30-certificates.conf
permissions: 0644
content: |
[Service]
# client environment variables
Environment=ETCD_CA_FILE=/home/core/etcd/certificates/ca.pem
Environment=ETCD_CERT_FILE=/home/core/etcd/certificates/coreos.pem
Environment=ETCD_KEY_FILE=/home/core/etcd/certificates/coreos-key.pem
# peer environment variables
Environment=ETCD_PEER_CA_FILE=/home/core/etcd/certificates/ca.pem
Environment=ETCD_PEER_CERT_FILE=/home/core/etcd/certificates/coreos.pem
Environment=ETCD_PEER_KEY_FILE=/home/core/etcd/certificates/coreos-key.pem
Run Code Online (Sandbox Code Playgroud) 我的最终目标是在3节点CoreOS集群上运行Kubernetes(如果有人有更好的建议,我会全力以赴:在这个阶段,我正在考虑CoreOS完全浪费我的时间).
我已经开始跟随CoreOS指南运行游民群(我甚至有在行动书CoreOs和,要么是没有太大的帮助) -我已经获得了新的discovery token和修改过的user-data和config.rb文件与那里描述:
#cloud-config
---
coreos:
etcd2:
discovery: https://discovery.etcd.io/7b9a3e994a14c2bf530ed88676e3fc97
Run Code Online (Sandbox Code Playgroud)
和:
$ cat config.rb
# Size of the CoreOS cluster created by Vagrant
$num_instances = 3
$update_channel = "stable"
Run Code Online (Sandbox Code Playgroud)
其余的都在原始coreos-vagrant存储库中.
首次启动时,似乎etcd不是作为服务启动的; 启动它systemctl似乎让它继续下去,但它没有发现它的同行:
core@core-01 ~ $ etcdctl member list
8e9e05c52164694d: name=4adff068c464446a8423e9b9f7c28711 peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true
Run Code Online (Sandbox Code Playgroud)
所有其他三个Vagrant虚拟机也是如此.
在我看来,要么修改user-data未被修改,要么以某种方式忽略发现标记.
我一直在谷歌搜索,但似乎没有出现.
我发现的主要困难是几乎所有围绕CoreOS/etcd的指令指向这些YAML文件,然后状态必须ct用来生成"真实"配置:但它们并没有真正显示如何在运行VM,或如何更改运行配置.
几个问题:
1)让三个虚拟机etcd启动并找到对方的"正确方法"是什么?阅读这里的指南真的没那么有用.
这三个虚拟机位于"仅限主机"网络上:
core@core-01 ~ $ ip address show …Run Code Online (Sandbox Code Playgroud) 我Kubernetes在自定义构建的CoreOS集群上使用v1.8.14 :
$ kubectl version --short
Client Version: v1.10.5
Server Version: v1.8.14+coreos.0
Run Code Online (Sandbox Code Playgroud)
尝试创建以下内容时ClusterRole:
$ cat ClusterRole.yml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:coredns
rules:
- apiGroups:
- ""
resources:
- endpoints
- services
- pods
- namespaces
verbs:
- list
- watch
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
$ kubectl create -f ClusterRole.yml
Error from server (Forbidden): error when creating "ClusterRole.yml": clusterroles.rbac.authorization.k8s.io "system:coredns" is forbidden: attempt to grant extra privileges: [PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["list"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], …Run Code Online (Sandbox Code Playgroud) 我目前正在修改CoreOS并基于它创建一个集群.到目前为止,CoreOS在单个主机上的体验非常顺畅.但是在服务发现方面,事情变得有点模糊.不知怎的,我没有得到整体想法,因此我现在在这里寻求帮助.
我想要做的是让两个Docker容器运行,第一个依赖于第二个.如果我们谈论纯粹的Docker,我可以使用链接容器解决这个问题.到现在为止还挺好.
但是这种方法不适用于跨机器边界,因为Docker无法跨多个主机链接容器.所以我想知道如何做到这一点.
到目前为止我所了解的是,CoreOS关于如何处理这个问题的想法是使用它的etcd服务,它基本上是一个分布式键值存储,可以通过端口在本地的每个主机上访问4001,所以你不必处理(作为消费者etcd)有任何网络细节:只是访问localhost:4001,你没事.
所以,在我看来,我现在认为这意味着当提供服务的Docker旋转时,它会在本地注册自己(即其IP地址和端口)etcd,并etcd负责在整个网络中分发信息.网络.这样,例如,您获得键值对,例如:
RedisService => 192.168.3.132:49236
Run Code Online (Sandbox Code Playgroud)
现在,当另一个Docker容器需要访问a时RedisService,它从其自己的本地获取IP地址和端口etcd,至少一旦信息已经通过网络分发.到现在为止还挺好.
但现在我有一个我无法回答的问题,这让我困惑了几天:当服务出现故障时会发生什么?谁清理了里面的数据etcd?如果未清除,则所有客户端都会尝试访问不再存在的服务.
我现在能想到的唯一(可靠)解决方案是利用etcd数据的TTL功能,但这需要权衡:要么你有相当高的网络流量,因为你需要每隔几秒发送一次心跳,或者你必须忍受过时的数据.两者都不好.
另一个,我能想到的"解决方案"是让服务在停机时注销,但这只适用于计划停机,而不是崩溃,电力,......
那么,你是如何解决这个问题的?
在Mac OS X上的Vagrant中运行此 CoreOS映像,利用VirtualBox 4.3.2版.
当我启动图像时,我收到以下错误:
[default] No guest additions were detected on the base box for this VM! Guest
additions are required for forwarded ports, shared folders, host only
networking, and more. If SSH fails on this machine, please install
the guest additions and repackage the box to continue.
This is not an error message; everything may continue to work properly,
in which case you may ignore this message.
Run Code Online (Sandbox Code Playgroud)
尽管事实上我在OS X上运行VirtualBox,但它似乎不支持guest添加.
尽管如此,我可以通过手动添加共享文件夹Settings -> Shared Folders …
我正在使用 CoreOS 运行 Docker 容器,它使用最新的 Debian 作为基础,并安装了各种软件包,包括主管和 apache2。我可以使用以下命令启动并成功运行 apache:
# /usr/bin/pidproxy /var/run/apache2.pid /bin/bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -DFOREGROUND -k start"
Run Code Online (Sandbox Code Playgroud)
但是,当我将此命令粘贴到主管配置文件中时:
[program:apache2]
command=/usr/bin/pidproxy /var/run/apache2.pid /bin/bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -DFOREGROUND -k start"
redirect_stderr=true
Run Code Online (Sandbox Code Playgroud)
并执行以下操作:
# supervisorctl start apache2
Run Code Online (Sandbox Code Playgroud)
我得到这样的回复:
apache2: ERROR (abnormal termination)
Run Code Online (Sandbox Code Playgroud)
查看主管进程日志文件,我看到 apache2 命令的帮助输出,就好像它是这样调用的apache2 -h。我不知道为什么在命令行上以 root 身份执行(ssh 进入容器)时运行的命令在由supervisorctl 逐字执行(以 root 身份运行)时不起作用。
任何正确方向的观点都将不胜感激。
我一直在使用kubernetes一段时间了.
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.0+2831379", GitCommit:"283137936a
498aed572ee22af6774b6fb6e9fd94", GitTreeState:"not a git tree", BuildDate:"2016-07-05T15:40:25Z", GoV
ersion:"go1.6.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"5cb86ee022267586db
386f62781338b0483733b3", GitTreeState:"clean", BuildDate:"", GoVersion:"", Compiler:"", Platform:""}
Run Code Online (Sandbox Code Playgroud)
我通常为每个项目设置一个Ingress,Service和Replication Controller.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: portifolio
name: portifolio-ingress
spec:
rules:
- host: www.cescoferraro.xyz
http:
paths:
- path: /
backend:
serviceName: portifolio
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: portifolio
name: portifolio
labels:
name: portifolio
spec:
selector:
name: portifolio
ports:
- name: web
port: …Run Code Online (Sandbox Code Playgroud) 我真的很难尝试使用 Terraform 在 vSphere 上部署 CoreOS 虚拟机。
到目前为止,这是我正在使用的 terraform 文件:
# Configure the VMware vSphere Provider. ENV Variables set for Username and Passwd.
provider "vsphere" {
vsphere_server = "192.168.105.10"
allow_unverified_ssl = true
}
provider "ignition" {
version = "1.0.0"
}
data "vsphere_datacenter" "dc" {
name = "Datacenter"
}
data "vsphere_datastore" "datastore" {
name = "vol_af01_idvms"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_resource_pool" "pool" {
name = "Cluster_rnd/Resources"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_network" "network" {
name = "VM Network"
datacenter_id = …Run Code Online (Sandbox Code Playgroud) 我想使用 Docker 和容器操作系统(如 CoreOS,最好是 RancherOS)将我的应用程序部署到 DigitalOcean。我对 Docker 足够熟悉,可以构建镜像。然而,这两个项目的大部分文档都讨论了使用 Docker Hub 部署容器。我不想使用 Docker Hub、AWS ECS 等。
那么,我能想到的部署应用程序的唯一其他方法是使用docker exportSSH/SFTP 将我的应用程序部署到我的 DigitalOcean Droplet 上。这是部署不在 Docker Hub 或类似服务上的 Docker 镜像的首选方式吗?
顺便说一句,我研究过 Rancher(应用程序)。我并不是在寻找像 Kubernetes、Swarm、Rancher 等那样复杂的东西。我目前不关心扩展。我主要感兴趣的是使用 Docker 作为一种便捷的方式来打包我的应用程序及其最小的依赖项,并使用容器操作系统来避免担心锁定成熟的 Linux 发行版的巨大攻击面。
我是新手ETCD,我想知道可以存储在的值是否有大小限制ETCD?
我正在流浪者中运行CoreOS 并希望以这种方式使用docker,在我关闭流浪者之后,我将vm名称更改为更短的一个,然后我运行vagrant up,首先,我发现身份验证失败问题:

然后我按Ctrl+C下来打断它,然后我vagrant ssh在文件夹中运行,这次,系统问我密码.

但我从未设置过这样的密码,那么CoreOS的默认密码是什么?或者我如何登录这个在流浪汉中运行的操作系统?
顺便说一句,coreos的图像是从http://beta.release.core-os.net/amd64-usr/下载的
有人说系统要求密码的原因是公钥验证失败,但为什么失败?
vagrant ssh-keys 说明:

现在我甚至无法从vbox gui登录到coreos:

一些调试消息vagrant up:

编辑1 似乎这个问题与ssh密钥有关,但为什么默认的ssh密钥失败了?现在如何解决这个问题?
我一直在尝试通过Harshicorp在服务器模式下通过其官方docker镜像设置Vault.尽管Vault服务器已成功启动,但我无法进入Vault docker容器,甚至无法进行交互.我使用了官方文档中给出的相同的docker run命令.
docker logs仅运行到容器会提供以下输出.
==> Vault server configuration:
Cgo: disabled
Log Level: info
Mlock: supported: true, enabled: true
Storage: file
Version: Vault v0.8.3
Version Sha: 6b29fb2b7f70ed538ee2b3c057335d706b6d4e36
==> Vault server started! Log data will stream in below:
Run Code Online (Sandbox Code Playgroud)
当试图打入docker vault容器时,我得到以下输出,
rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"/bin/bash\\\": stat /bin/bash: no such file or directory\"\n"
Run Code Online (Sandbox Code Playgroud)
找不到任何指向这样的问题的东西.这是一个已知问题,我想知道,我在这里做错了什么?
注 - 我的环境是AWS CoreOS实例.
coreos ×13
docker ×7
etcd ×3
kubernetes ×3
vagrant ×2
virtualbox ×2
amazon-ecs ×1
apache ×1
certificate ×1
etcd3 ×1
kubectl ×1
macos ×1
rancher ×1
rbac ×1
ssl ×1
supervisord ×1
terraform ×1
vsphere ×1