Support armada-go image for bootstrap purposes

Signed-off-by: Ruslan Aliev <raliev@mirantis.com>
Change-Id: I6d8629a48c1b862db937ddc3cd68792220388b19
This commit is contained in:
Ruslan Aliev 2024-01-07 19:33:33 -06:00
parent 2dda3c505c
commit 11c36627ee
3 changed files with 298 additions and 11 deletions

View File

@ -0,0 +1,269 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: armadacharts.armada.airshipit.io
spec:
group: armada.airshipit.io
names:
kind: ArmadaChart
listKind: ArmadaChartList
plural: armadacharts
singular: armadachart
scope: Namespaced
versions:
- name: v1
schema:
openAPIV3Schema:
description: ArmadaChart is the Schema for the armadacharts API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
data:
description: ArmadaChartSpec defines the desired state of ArmadaChart
properties:
chart_name:
description: ChartName is an example field of ArmadaChart. Edit armadachart_types.go
to remove/update
type: string
namespace:
description: Namespace is an example field of ArmadaChart. Edit armadachart_types.go
to remove/update
type: string
release:
description: Release is an example field of ArmadaChart. Edit armadachart_types.go
to remove/update
type: string
source:
description: Source is an example field of ArmadaChart. Edit armadachart_types.go
to remove/update
properties:
location:
description: Location is an example field of ArmadaChart. Edit
armadachart_types.go to remove/update
type: string
subpath:
description: Subpath is an example field of ArmadaChart. Edit
armadachart_types.go to remove/update
type: string
type:
description: Type is an example field of ArmadaChart. Edit armadachart_types.go
to remove/update
type: string
type: object
test:
description: Test holds the values for this Helm release.
properties:
enabled:
description: Enabled is an example field of ArmadaChart. Edit
armadachart_types.go to remove/update
type: boolean
type: object
upgrade:
description: Delete holds the values for this Helm release.
properties:
pre:
properties:
delete:
items:
description: ArmadaChartDeleteResource defines the wait
options of ArmadaChart
properties:
labels:
additionalProperties:
type: string
description: Labels is an example field of ArmadaChart.
Edit armadachart_types.go to remove/update
type: object
type:
description: Type is an example field of ArmadaChart.
Edit armadachart_types.go to remove/update
type: string
type: object
type: array
type: object
type: object
values:
description: Values holds the values for this Helm release.
x-kubernetes-preserve-unknown-fields: true
wait:
description: Wait holds the values for this Helm release.
properties:
labels:
additionalProperties:
type: string
description: Labels is an example field of ArmadaChart. Edit armadachart_types.go
to remove/update
type: object
native:
description: ArmadaChartWaitNative defines the wait options of
ArmadaChart
properties:
enabled:
description: Enabled is an example field of ArmadaChart. Edit
armadachart_types.go to remove/update
type: boolean
type: object
resources:
items:
description: ArmadaChartWaitResource defines the wait options
of ArmadaChart
properties:
labels:
additionalProperties:
type: string
description: Labels is an example field of ArmadaChart.
Edit armadachart_types.go to remove/update
type: object
min_ready:
type: string
type:
description: Type is an example field of ArmadaChart. Edit
armadachart_types.go to remove/update
type: string
type: object
type: array
timeout:
description: Timeout is the time to wait for full reconciliation
of Helm release.
type: integer
type: object
type: object
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
status:
description: ArmadaChartStatus defines the observed state of ArmadaChart
properties:
conditions:
description: Conditions holds the conditions for the ArmadaChart.
items:
description: "Condition contains details for one aspect of the current
state of this API Resource. --- This struct is intended for direct
use as an array at the field path .status.conditions. For example,
\n type FooStatus struct{ // Represents the observations of a
foo's current state. // Known .status.conditions.type are: \"Available\",
\"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge
// +listType=map // +listMapKey=type Conditions []metav1.Condition
`json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\"
protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }"
properties:
lastTransitionTime:
description: lastTransitionTime is the last time the condition
transitioned from one status to another. This should be when
the underlying condition changed. If that is not known, then
using the time when the API field changed is acceptable.
format: date-time
type: string
message:
description: message is a human readable message indicating
details about the transition. This may be an empty string.
maxLength: 32768
type: string
observedGeneration:
description: observedGeneration represents the .metadata.generation
that the condition was set based upon. For instance, if .metadata.generation
is currently 12, but the .status.conditions[x].observedGeneration
is 9, the condition is out of date with respect to the current
state of the instance.
format: int64
minimum: 0
type: integer
reason:
description: reason contains a programmatic identifier indicating
the reason for the condition's last transition. Producers
of specific condition types may define expected values and
meanings for this field, and whether the values are considered
a guaranteed API. The value should be a CamelCase string.
This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False, Unknown.
enum:
- "True"
- "False"
- Unknown
type: string
type:
description: type of condition in CamelCase or in foo.example.com/CamelCase.
--- Many .condition.type values are consistent across resources
like Available, but because arbitrary conditions can be useful
(see .node.status.conditions), the ability to deconflict is
important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
type: array
failures:
description: Failures is the reconciliation failure count against
the latest desired state. It is reset after a successful reconciliation.
format: int64
type: integer
helmChart:
description: HelmChart is the namespaced name of the HelmChart resource
created by the controller for the ArmadaChart.
type: string
installFailures:
description: InstallFailures is the install failure count against
the latest desired state. It is reset after a successful reconciliation.
format: int64
type: integer
lastAppliedRevision:
description: LastAppliedRevision is the revision of the last successfully
applied source.
type: string
lastAttemptedRevision:
description: LastAttemptedRevision is the revision of the last reconciliation
attempt.
type: string
lastAttemptedValuesChecksum:
description: LastAttemptedValuesChecksum is the SHA1 checksum of the
values of the last reconciliation attempt.
type: string
lastHandledReconcileAt:
description: LastHandledReconcileAt holds the value of the most recent
reconcile request value, so a change of the annotation value can
be detected.
type: string
lastReleaseRevision:
description: LastReleaseRevision is the revision of the last successful
Helm release.
type: integer
observedGeneration:
description: ObservedGeneration is the last observed generation.
format: int64
type: integer
tested:
description: Tested is the bool value whether the Helm Release was
successfully tested or not.
type: boolean
upgradeFailures:
description: UpgradeFailures is the upgrade failure count against
the latest desired state. It is reset after a successful reconciliation.
format: int64
type: integer
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -21,6 +21,11 @@ spec:
- |-
set -x
if [ ! -e "${ARMADA_LOGFILE}" ]; then
touch "${ARMADA_LOGFILE}"
fi
tail -f "${ARMADA_LOGFILE}" &
declare -i attempt=1
while true; do
@ -28,9 +33,6 @@ spec:
if armada \
apply \
--target-manifest {{ config.get_path('Genesis:armada.target_manifest', 'cluster-bootstrap') }} \
{%- if config['Genesis:enable_operator'] is sameas true %}
--enable-operator \
{%- endif %}
$([[ $attempt -le $ARMADA_METRICS_MAX_ATTEMPTS ]] && echo --metrics-output "${ARMADA_METRICS_OUTPUT_DIR}/armada-bootstrap-${attempt}.prom") \
/etc/genesis/armada/assets/manifest.yaml &>> "${ARMADA_LOGFILE}"; then
break
@ -72,14 +74,25 @@ spec:
- name: metrics
mountPath: /tmp/metrics
{%- if config['Genesis:enable_operator'] is sameas true %}
- args:
- --health-probe-bind-address=:8081
- --metrics-bind-address=127.0.0.1:8080
- --leader-elect
- --leader-elect-namespace=ucp
command:
- /manager
- command:
- /bin/sh
- -c
- |-
set -x
if [ ! -e "${ARMADA_OPERATOR_LOGFILE}" ]; then
touch "${ARMADA_OPERATOR_LOGFILE}"
fi
tail -f "${ARMADA_OPERATOR_LOGFILE}" &
/manager \
--health-probe-bind-address=:8081 \
--metrics-bind-address=127.0.0.1:8080 \
--leader-elect \
--leader-elect-namespace=ucp 2>&1 | tee -a "${ARMADA_OPERATOR_LOGFILE}"
env:
- name: ARMADA_OPERATOR_LOGFILE
value: /tmp/log/bootstrap-armada-operator.log
- name: KUBECONFIG
value: /root/.kube/config
image: {{ config['Genesis:images.armada-operator'] }}
@ -101,6 +114,8 @@ spec:
volumeMounts:
- name: auth
mountPath: /root/.kube
- name: log
mountPath: /tmp/log
{%- endif %}
- name: monitor
image: {{ config['HostSystem:images.monitoring_image'] }}

View File

@ -7,6 +7,8 @@
mkdir -p /var/log/armada
touch /var/log/armada/bootstrap-armada.log
chmod 777 /var/log/armada/bootstrap-armada.log
touch /var/log/armada/bootstrap-armada-operator.log
chmod 777 /var/log/armada/bootstrap-armada-operator.log
{% set metrics_output_dir = config.get_path('Genesis:armada.metrics.output_dir', '/var/log/node-exporter-textfiles') %}
install -d -m 755 {{ metrics_output_dir }}
@ -33,10 +35,11 @@ log
log === Deploying bootstrap manifest via Armada ===
set -x
while [[ ! -e /var/log/armada/bootstrap-armada.log ]]; do
while [[ ! -e /var/log/armada/bootstrap-armada.log || ! -e /var/log/armada/bootstrap-armada-operator.log ]]; do
sleep 5
done
tail -f /var/log/armada/bootstrap-armada.log &
tail -f /var/log/armada/bootstrap-armada-operator.log &
set +x
while true; do