Hawk Container Edition Components YAML Files
As per their requirement, each component (Hawk agent, Hawk Cluster Manager, and Hawk Console) of Hawk Container Edition uses different strategy for deployment.
Hawk Cluster Manager YAML File for AWS
The Hawk Cluster Manager (hkce_clustermanager) is a seed node to which all other containers connect. Thus, this container should be reachable from all the containers. Also the network information should not be lost even when it is restarted or rescheduled.
Use the Kubernetes StatefulSets for deploying Hawk Cluster Manager. Like a Deployment, a StatefulSet manages Pods that are based on an identical container specifications. Unlike a Deployment, a StatefulSet maintains a sticky identity for each of their Pods. For details about Kubernetes StatefulSets, see the Kubernetes documentation. Also, create a headless service so that all other containers can reach Hawk Cluster Manager container. In a headless service you specify the clusterIP as None . For details about headless service, see to the Kubernetes documentation. For the Pods created by StatefulSets with headless service, DNS entries are created in the form <pod-name>.<headless-service-name>.
For example, for a StatefulSet with N replicas, each Pod in the StatefulSet is assigned an integer ordinal, from 0 up through N-1, that is unique over the Set. So if your StatefulSets has a name "my-stateful-set" with 3 replicas, it creates three pods with names my-stateful-set-0, my-stateful-set-1 and my-stateful-set-2. Also, if you create a headless service with the name "my-service", then you can connect to these StatefulSets pods using the host name my-stateful-set-0.my-service, my-stateful-set-1.my-service, and so on.
For the Hawk Cluster Manager, create only one hkce_clustermanager pod using StatefulSets with the name hkce-clustermanager-set and headless service with the name hkce-clustermanager-service . Thus, other components can connect to this pod using the hostname hkce-clustermanager-set-0.hkce-clustermanager-service. Set the clusterIP as None for the headless service.
Set up the container (the containers tag) with the Docker image (image) of the Hawk Cluster Manager.
Sample Content for Hawk Cluster Manager YAML File
apiVersion: v1
kind: Service
metadata:
name: hkce-service
spec:
ports:
- port: 2561
protocol: TCP
targetPort: 2561
selector:
app: hkce-clustermanager
clusterIP: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: hkce-clustermanager
name: hkce-clustermanager-set
spec:
serviceName: hkce-service
selector:
matchLabels:
app: hkce-clustermanager
template:
metadata:
labels:
app: hkce-clustermanager
spec:
containers:
- name: hkce-clustermanager
image: <aws_docker_registry>/hkce_clustermanager:2.0
imagePullPolicy: Always
env:
- name: tcp_self_url
value: hkce-clustermanager-set-0.hkce-service:2561
- name: tcp_daemon_url
value: hkce-clustermanager-set-0.hkce-service:2561
ports:
- containerPort: 2561
protocol: TCP
Hawk Agent YAML File for AWS Deployment
Hawk agent must be deployed on all nodes. Thus, for Hawk agent the resource type should be DaemonSet. A DaemonSet ensures that all (or some) nodes run a copy of a Pod.
Set up the container (the containers tag) with the Docker image (image) of the Hawk agent. The tcp_self_url should be set to the hostname of the pod in which Hawk agent container is running. You can use the Kubernetes downward API to get the hostname of the pod. For this set fieldPath to status.podIP . This ensures that each hkce_agent has a unique tcp_self_url. Also the ami_tcp_session for each agent should be set to the node IP on which this hkce_agent container is deployed. You can use the Kubernetes downward API to get the hostname of the node. For this set fieldPath to status.hostIP. The AMI applications running on that node can use same status.hostIP in their daemon_url. Specify the protocol and port to connect to this service.
Sample Content for Hawk Agent YAML File
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: hkce-agent-set
labels:
app: hkce-agent
spec:
selector:
matchLabels:
name: hkce-agent-set
template:
metadata:
labels:
name: hkce-agent-set
spec:
containers:
- name: hkce-agent
image: <aws_docker_registry>/hkce_agent:2.0
imagePullPolicy: Always
env:
- name: HOST_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: tcp_self_url
value: ${HOST_NAME}:2551
- name: tcp_daemon_url
value: hkce-clustermanager-set-0.hkce-service:2561
- name: ami_tcp_session
value: ${HOST_IP}:2571
- name: config_path
value: /tibco.home/hkce/2.0/config/
- name: DOCKER_HOST
value: unix:///var/run/docker.sock
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock-volume
ports:
- containerPort: 2551
name: agentport
protocol: TCP
- containerPort: 2571
hostPort: 2571
protocol: TCP
volumes:
- name: docker-sock-volume
hostPath:
path: /var/run/docker.sock
Hawk Console YAML File for AWS Deployment
Setup the a pod with load-balancer service for deploying Hawk Console. The load balancer provides an externally-accessible IP address that sends traffic to the correct port on your cluster nodes.
The load-balancer service would enable us to access the console 8083 port from outside. Set up the container ( the containers tag) with the Docker image (the image tag) of the Hawk Console. Also like Hawk agent, the Hawk Console uses the Kubernetes downward API to access hostname of the pod. For this set fieldPath of HOST_NAME to status.podIP and use this in the tcp_self_url.
Sample Content for Hawk Console YAML File
apiVersion: v1
kind: Service
metadata:
name: hkce-console-service
spec:
type: LoadBalancer
ports:
- port: 8083
targetPort: 8083
selector:
app: hkce-console
---
apiVersion: v1
kind: Pod
metadata:
name: hkce-console
labels:
name: hkce-console
app: hkce-console
spec:
containers:
- name: hkce-console
image: <aws_docker_registry>/hkce_console:2.0
imagePullPolicy: Always
env:
- name: HOST_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: tcp_self_url
value: ${HOST_NAME}:2551
- name: tcp_daemon_url
value: hkce-clustermanager-set-0.hkce-service:2561
- name: hawk_domain
value: default
- name: hawk_console_repository_path
value: /tibco.home/hkce/2.0/repo
ports:
- containerPort: 2551
name: consoleport
protocol: TCP
- containerPort: 8083
