与机群一起使用的CoreOS 使得可以构建运行某些docker应用程序的服务.
但有没有办法运行docker服务,它需要在重启之间保持状态,才能持久化?例如,必须存储稍后要共享的某些文件的数据库或服务.
因为据我所知,该服务可以在core-1机器上启动(例如),并且在重启时将随机启动另一个服务.因此,码头工作量可能会丢失.
首先,比较这两种产品是否正确?如果是,它们之间的主要区别是什么?
我正在在Coreos中配置具有2个节点的Kubernetes集群,如https://coreos.com/kubernetes/docs/latest/getting-started.html中所述,没有法兰绒。两台服务器都在同一网络中。
但是我得到了:x509:在工作程序中运行kubelet时,由未知权限签名的证书(可能是由于“ crypto / rsa:验证错误”,而试图验证候选授权证书“ kube-ca”)。
我按照文档中的说明在两台服务器上都正确配置了TLS证书。
主节点工作正常。而且,kubectl能够在主容器中射击容器和吊舱。
问题1:何解决这个问题?
问题2:有什么方法可以配置没有TLS证书的群集?
Coreos version:
VERSION=899.15.0
VERSION_ID=899.15.0
BUILD_ID=2016-04-05-1035
PRETTY_NAME="CoreOS 899.15.0"
Run Code Online (Sandbox Code Playgroud)
Etcd conf:
$ etcdctl member list
ce2a822cea30bfca: name=78c2c701d4364a8197d3f6ecd04a1d8f peerURLs=http://localhost:2380,http://localhost:7001 clientURLs=http://172.24.0.67:2379
Run Code Online (Sandbox Code Playgroud)
主人:kubelet.service:
[Service]
ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests
Environment=KUBELET_VERSION=v1.2.2_coreos.0
ExecStart=/opt/bin/kubelet-wrapper \
--api-servers=http://127.0.0.1:8080 \
--register-schedulable=false \
--allow-privileged=true \
--config=/etc/kubernetes/manifests \
--hostname-override=172.24.0.67 \
--cluster-dns=10.3.0.10 \
--cluster-domain=cluster.local
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
大师:kube-controller.yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-controller-manager
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: kube-controller-manager
image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
command:
- …Run Code Online (Sandbox Code Playgroud) 将文件移动到/usr/local/bin它时说:
mv: inter-device move failed: 'kubectl' to '/usr/local/bin/kubectl';
unable to remove target: Read-only file system
Run Code Online (Sandbox Code Playgroud)
我已经试过了 chmod
如何使CoreOS目录可写?
问候,
一周以来,我一直在尝试设置FCOS (Fedora CoreOS) 并运行Docker Swarm和SELinux(这是我第一次使用 SELinux)
容器运行得很好,但是当我尝试使用时,/var/run/docker.socket我总是会遇到permission denied
portainer_agent.0.k9c6uqifwohk@localhost | 2020/03/14 13:24:11 [ERROR] [main,docker] [message: Unable to retrieve information from Docker] [error: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info: dial unix /var/run/docker.sock: connect: permission denied]
Run Code Online (Sandbox Code Playgroud)
我已经尝试禁用 SELinux ( setenforce 0) 以确保问题来自 SELinux,
docker.socket
srw-rw----. 1 root docker system_u:object_r:container_var_run_t:s0 0 Mar 14 13:14 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
这是我用于测试的 docker-compose.yaml
portainer_agent.0.k9c6uqifwohk@localhost | 2020/03/14 13:24:11 …Run Code Online (Sandbox Code Playgroud) 我已经设置了在vagrant VM中运行的coreos.我想设置私人码头注册表.我拉了注册表,我可以运行它.以下是运行注册表的输出
core@core-01 ~ $ docker run -p 5000:5000 registry
2014-12-22 01:40:32 [1] [INFO] Starting gunicorn 19.1.0
2014-12-22 01:40:32 [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
2014-12-22 01:40:32 [1] [INFO] Using worker: gevent
2014-12-22 01:40:32 [20] [INFO] Booting worker with pid: 20
2014-12-22 01:40:32 [23] [INFO] Booting worker with pid: 23
2014-12-22 01:40:32 [24] [INFO] Booting worker with pid: 24
2014-12-22 01:40:32 [25] [INFO] Booting worker with pid: 25
2014-12-22 01:40:32 [1] [INFO] 4 workers
22/Dec/2014:01:40:32 +0000 WARNING: Cache storage disabled! …Run Code Online (Sandbox Code Playgroud) 我正在使用 CoreOS 和 SystemD 计时器来运行我的报告......
我有某些监控报告需要在接下来的 12 小时内每 3 小时运行一次,每半小时运行一次。如果我想在 1230 醒来以停止报告,那么实现起来非常简单。
systemd 计时器中是否有“终止计时器”选项或类似的选项>
我一直在尝试为远程客户端的 HTTP REST API 服务器访问启用令牌身份验证。
我使用这个脚本安装了我的 CoreOS/K8S 集群控制器:https : //github.com/coreos/coreos-kubernetes/blob/master/multi-node/generic/controller-install.sh
我的集群工作正常。这是一个 TLS 安装,因此我需要使用客户端证书配置任何 kubectl 客户端以访问集群。
然后我尝试通过运行启用令牌身份验证:
echo `dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null`
Run Code Online (Sandbox Code Playgroud)
这给了我一个令牌。然后我将令牌添加到我的控制器上包含令牌和默认用户的令牌文件中:
$> cat /etc/kubernetes/token
3XQ8W6IAourkXOLH2yfpbGFXftbH0vn,default,default
Run Code Online (Sandbox Code Playgroud)
然后我修改了 /etc/kubernetes/manifests/kube-apiserver.yaml 以添加:
- --token-auth-file=/etc/kubernetes/token
Run Code Online (Sandbox Code Playgroud)
到启动参数列表
然后我重新启动(不确定自己重新启动 API Server 的最佳方法??)
此时,来自远程服务器的 kubectl 停止工作(无法连接)。然后我查看docker ps控制器并查看 api 服务器。我运行docker logs container_id并没有输出。如果我查看其他 docker 容器,我会看到如下输出:
E0327 20:05:46.657679 1 reflector.go:188]
pkg/proxy/config/api.go:33: Failed to list *api.Endpoints:
Get http://127.0.0.1:8080/api/v1/endpoints?resourceVersion=0:
dial tcp 127.0.0.1:8080: getsockopt: connection refused …Run Code Online (Sandbox Code Playgroud) 从 docker 容器内将结构化日志写入日志的最佳方法是什么?
例如,我有一个使用sd_journal_send写入的应用程序 ,我没有更改应用程序,而是尝试通过
-v /var/log/systemd/journal:/var/log/systemd/journal
它适用于我的 Ubuntu 16.04 桌面,但不适用于运行应用程序的 CoreOS 实例(使用 Ubuntu 16.04 基础映像)。我不太明白为什么。也许有更好的方式发送到期刊?
docker Journald 输出日志记录选项有哪些限制?它似乎不支持应用程序写入的内容不仅仅是消息字段。
--
所以我发现我需要-v /dev/log:/dev/log
但还有一个问题就是与启动docker容器的服务文件没有关联。手动添加 UNIT: servicename.service 没有解决问题。因此,在查看和传送服务日志时,它与 exe 相关联,但与容器或服务无关。谁遇到过这些问题,您是如何解决的?
——好吧,让我稍微扩展一下。
AC 程序可以像这样写入 systemd 日志:
#include <systemd/sd-journal.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
sd_journal_send("MESSAGE=Hello World!",
"MESSAGE_ID=52fb62f99e2c49d89cfbf9d6de5e3555",
"PRIORITY=5",
"HOME=%s", getenv("HOME"),
"TERM=%s", getenv("TERM"),
"PAGE_SIZE=%li", sysconf(_SC_PAGESIZE),
"N_CPUS=%li", sysconf(_SC_NPROCESSORS_ONLN),
NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这会写入日志并添加自定义字段,如 HOME、TERM、PAGE_SIZE 等。当我使用 Journalbeat 将它们发送到 ELK 堆栈时,这些字段最终会很好地出现在 elasticsearch 中,我可以直接搜索它们。
然而,docker 似乎只是简单地获取应用程序的标准输出,并将其提供给日志,仅包含它自己添加的几个字段。例如 CONTAINER_ID。
当在 Docker 容器内使用这样的程序然后从服务文件运行它们时,会产生一个小问题。
1)我必须传递一些目录和设备文件才能使用 …
coreos ×10
docker ×6
kubernetes ×3
systemd ×2
containers ×1
mesos ×1
mesosphere ×1
readonly ×1
registry ×1
rkt ×1
selinux ×1
timer ×1
vagrant ×1