我有一个有3名成员的州议会。可以从集群内部访问它们,例如:
podname-{0..n}.service.default.svc.cluster.local
我正在使用Controller中的Kubernetes API。我刚用:
创建了Statefulsetimport (
"k8s.io/client-go/kubernetes"
appsv1 "k8s.io/api/apps/v1"
)
...
s := appsv1.StatefulSet{ /* some data */ }
kubernetes.AppsV1().StatefulSets(nameSpace).Create(s)
让我们假设一切正常,几分钟后我就有3个正在运行的Pod。如何获取新创建的Pod的Pod DNS条目?
我知道我可以使用以下方式构建DNS:
fmt.Sprintf("%s-%d.%s.%s.svc.cluster.local", s.Name, idx, service, S.Namespace)
但我发现了一些问题:
StatefulSet
cluster.local
,这不一定是真的我认为它应该存在(但我不确定它是否真的存在),是一个API,给定一个StatefulSet将允许我知道创建的副本的DNS名称。这样的API是否存在?
答案 0 :(得分:2)
使用Service
创建无头StatefulSet
时,应创建DNS SRV条目。您可以查询该内容以获取与无头Service
对应的窗格的所有主机名列表,而不知道该号码。例如,如果使用Python,您可以执行以下操作:
>>> import dns
>>> for item in dns.resolver.query('your-app-name-headless', 'SRV'): item
...
<DNS IN SRV rdata: 10 25 0 2555bb89.your-app-name-headless.your-project.svc.cluster.local.>
<DNS IN SRV rdata: 10 25 0 830bdb18.your-app-name-headless.your-project.svc.cluster.local.>
<DNS IN SRV rdata: 10 25 0 aeb532de.your-app-name-headless.your-project.svc.cluster.local.>
<DNS IN SRV rdata: 10 25 0 a432c21f.your-app-name-headless.your-project.svc.cluster.local.>
请参阅:
答案 1 :(得分:1)
事件嗅探你所需要的几乎就是KubeDNS的工作方式。
所以code here古老而简单的方式。
看看override func viewWillAppear(_ animated: Bool) {
addView()
}
方法。
所以这里是代码的简短例子
podWatchFunc
中另一个好的推荐方式
func podWatchFunc(c *kubernetes.Clientset, ns string, s labels.Selector) func(options meta.ListOptions) (watch.Interface, error) {
return func(options meta.ListOptions) (watch.Interface, error) {
if s != nil {
options.LabelSelector = s.String()
}
w, err := c.CoreV1().Pods(ns).Watch(options)
if err != nil {
return nil, err
}
return w, nil
}
}
您也可能了解dns是单独的k8s服务,而不是群集服务的一部分。所以找到ip / host并调用你的dns端点 For details 如果您使用默认命名策略和coredsn或dns-masq服务。 您还可以拥有pod metadata名称或自我链接
的域名 import (
"fmt"
"k8s.io/client-go/1.4/kubernetes"
"k8s.io/client-go/1.4/pkg/api/v1"
"k8s.io/client-go/1.4/tools/clientcmd"
)
...
// uses the current context in kubeconfig
config, _ := clientcmd.BuildConfigFromFlags("", "path to kubeconfig")
// creates the clientset
clientset, _:= kubernetes.NewForConfig(config)
// access the API to list pods
pods, _:= clientset.CoreV1().Pods("").List(v1.ListOptions{})
fmt.Printf("There are %d pods in the cluster\n", len(pods.Items))
...