我有一个DAG(DAG1),我复制了一堆文件.然后,我想为每个复制的文件启动另一个DAG(DAG2).由于复制的文件数量因DAG1运行而异,我希望基本上循环遍历文件并使用适当的参数调用DAG2.
例如:
with DAG( 'DAG1',
description="copy files over",
schedule_interval="* * * * *",
max_active_runs=1
) as dag:
t_rsync = RsyncOperator( task_id='rsync_data',
source='/source/',
target='/destination/' )
t_trigger_preprocessing = TriggerDagRunOperator( task_id='trigger_preprocessing',
trigger_daq_id='DAG2',
python_callable=trigger
)
t_rsync >> t_trigger_preprocessing
Run Code Online (Sandbox Code Playgroud)
我希望使用python_callable trigger从中提取相关的xcom数据t_rsync,然后触发DAG2; 但我不清楚如何做到这一点.
我更愿意在这里调用DAG2的逻辑来简化DAG2的内容(并提供堆栈原理图max_active_runs)
我有一个简单的(非线程)脚本,它在套接字上侦听数据,分析它并使用内部SIGALRM的命令在预定义的计时器内部发送电子邮件.
问题是在recv()循环期间,出现的情况SIGALRM似乎提高了
socket.error: [Errno 4] Interrupted system call
Run Code Online (Sandbox Code Playgroud)
因此终止了该计划.
我可以recv()使用try/except块包装,但我想知道在此期间我是否会丢失任何数据,或者缓冲区是否会阻止丢失.
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
while True:
try:
data = s.recv(2048)
except socket.error, e:
pass
yield data
s.close()
return
Run Code Online (Sandbox Code Playgroud) 我正在尝试在kubernetes v1.9.2中测试本地持久卷。
从我收集的信息中(我可能是错的!)我不能使用kubeadm这些功能门:
$ sudo kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T09:42:01Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
$ kubeadm init --help
...
--feature-gates string A set of key=value pairs that describe feature gates for various features. Options are:
CoreDNS=true|false (ALPHA - default=false)
DynamicKubeletConfig=true|false (ALPHA - default=false)
SelfHosting=true|false (ALPHA - default=false)
StoreCertsInSecrets=true|false (ALPHA - default=false)
...
Run Code Online (Sandbox Code Playgroud)
太...我做了一个普通的kubeadm初始化,然后继续破解:
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Run Code Online (Sandbox Code Playgroud)
与
Environment="KUBELET_FEATURE_GATES_ARGS=--feature-gates=PersistentLocalVolumes=true,VolumeScheduling=true,MountPropagation=true"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS $KUBELET_FEATURE_GATES_ARGS
Run Code Online (Sandbox Code Playgroud)
并重新加载/重启kubelet …
我在python中使用configparser模块来读写一些.ini样式文件.我希望能够创建和写入该DEFAULTS部分,但是,似乎硬编码不允许创建这样的部分.
可能吗?甚至建议这样做?
我通过以下方式设置了私人码头注册表(v2):
docker run -d -p 4000:5000 --restart=always --name registry \
-v `pwd`/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
Run Code Online (Sandbox Code Playgroud)
我确保在所有机器上手动覆盖注册表dns:
# cat /etc/hosts | grep myregistrydomain.com
172.23.67.28 myregistrydomain.com
Run Code Online (Sandbox Code Playgroud)
我certs为假主机名创建了一个自签名证书,myregistrydomain.com并使用以下内容添加了一个简单的身份验证:
mkdir auth
sudo docker run --entrypoint htpasswd registry:2 -Bbn kolla kolla-pass > auth/htpasswd
Run Code Online (Sandbox Code Playgroud)
我然后复制.crt到两个/etc/docker/certs.d/myregistrydomain.com\:4000/ca.crt并在所有机器上/etc/pki/ca-trust/source/anchors/myregistrydomain.com.crt运行update-ca-trust并重新启动docker(centos7).
在主持人A上,我得到:
# docker login --username=kolla --password=kolla-pass myregistrydomain.com:4000
Login Succeeded
Run Code Online (Sandbox Code Playgroud)
但是,在主机B上,我得到:
# …Run Code Online (Sandbox Code Playgroud) 我已经能够让 kubernetes 识别我的节点上的 GPU:
$ kubectl get node MY_NODE -o yaml
...
allocatable:
cpu: "48"
ephemeral-storage: "15098429006"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 263756344Ki
nvidia.com/gpu: "8"
pods: "110"
capacity:
cpu: "48"
ephemeral-storage: 16382844Ki
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 263858744Ki
nvidia.com/gpu: "8"
pods: "110"
...
Run Code Online (Sandbox Code Playgroud)
我旋转一个吊舱
Limits:
cpu: 2
memory: 2147483648
nvidia.com/gpu: 1
Requests:
cpu: 500m
memory: 536870912
nvidia.com/gpu: 1
Run Code Online (Sandbox Code Playgroud)
但是,pod 仍处于 PENDING 状态:
Insufficient nvidia.com/gpu.
Run Code Online (Sandbox Code Playgroud)
我正确指定了资源吗?
如果能够在更高级别定义一种方法来确定一组 pod 应该在其上运行的一组节点,对我来说将会非常有用。
有没有办法使用 kustomize 以便我可以指定部署应具有哪些 nodeSelector?
我有一些代码使用字符串动态确定要使用的模型类和find_by()的字段.但是,我很难用这些变量来获取模型实例.具体来说,我有
class Item
include MongoMapper::Document
key :my_variable, String
Run Code Online (Sandbox Code Playgroud)
在我的代码中我有
m = "Item"
f = "my_variable"
Run Code Online (Sandbox Code Playgroud)
我希望能够
i = m.find_by_my_variable( f )
result = i[f]
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
我有一个模块blah.time,我在正常的时间和日期操作周围进行一些健全性检查和包装函数:
import time
def sleep(n):
time.sleep(n)
Run Code Online (Sandbox Code Playgroud)
当我调用时sleep,它只会抛出一个最大的递归错误.我猜测命名空间是错误的,所以我尝试使用import time as _time,但我仍然得到相同的错误.
如何time从我自己的模块中引用系统模块以防止此命名空间冲突?
kustomize的文档提供了一个很好的单行代码来比较两种不同的覆盖...
diff \
<(kustomize build $OVERLAYS/staging) \
<(kustomize build $OVERLAYS/production)
Run Code Online (Sandbox Code Playgroud)
有没有办法做同样的事情,但针对特定 kubernetes 命名空间中运行的内容以及磁盘上定义的覆盖层?
更具体地说,知道kubectl apply -k .不实际做会做什么?using--dry-run只是说吐出对象列表而不是真正的差异。