我试图创建一个EKS群集,其中Jenkins运行在Jenkins节点上,Nexus运行在Nexus节点上。为此,我试图使用节点选择器,它没有按预期工作,我不明白我缺少了哪一部分。
我创建EKS集群的cluster.yaml如下所示:
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: Devops-Test
region: ap-south-1
vpc:
id: vpc-xxxxxx
cidr: "192.168.0.0/16"
subnets:
public:
ap-south-1a:
id: subnet-xxxx
ap-south-1b:
id: subnet-xxxx
private:
ap-south-1a:
id: subnet-xxxx
ap-south-1b:
id: subnet-xxxx
nodeGroups:
- name: jenkins-public-node-group
tags: { role: "jenkins" }
instanceType: t2.medium
desiredCapacity: 2
- name: jenkins-private-node-group
tags: { role: "jenkins" }
instanceType: t2.medium
desiredCapacity: 2
privateNetworking: true
- name: nexus-public-node-group
tags: { role: "nexus" }
instanceType: t2.medium
desiredCapacity: 2
- name: nexus-private-node-group
tags: { role: "nexus" }
instanceType: t2.medium
desiredCapacity: 2
privateNetworking: true
我的部署.yaml如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: devops-tools
namespace: devops
spec:
replicas: 2
selector:
matchLabels:
role: jenkins
template:
metadata:
labels:
role: jenkins
spec:
nodeSelector:
role: jenkins
containers:
- name: jenkins
image: jenkins:2.60.3
ports:
- containerPort: 8080
最后我的service.yaml如下
apiVersion: v1
kind: Service
metadata:
name: jenkins-service
namespace: devops
spec:
type: NodePort
selector:
role: jenkins
ports:
- nodePort: 31429
port: 8080
targetPort: 8080
我希望Jenkins仅在标记为role:jenkins的节点上运行,但它也可以在没有该标记的节点上运行,我甚至尝试过使用该标记应用label
kubectl标签节点角色=jenkins
然后应用deployment.yaml,但是部署仍然发生在没有该标签的节点上。
1条答案
按热度按时间whhtz7ly1#
在
cluster.yaml
文件中应使用labels
而不是tags
。有关详细信息,请参见这些docs。
标签适用于AWS标签,而AWS标签与Kubernetes无关。在尝试应用节点选择器时,只有标签才相关。
顺便说一句-你也应该确保你的节点选择器被应用到你的pod上-因为pod不应该被允许在没有指定标签的节点上。从你所描述的行为来看-似乎pod是在没有节点选择器的情况下创建的。