Skip to content

Commit 41ebc1c

Browse files
authored
Merge pull request #18 from epics-containers/dev
add tutorials 09 10
2 parents e669d22 + c271106 commit 41ebc1c

16 files changed

+447
-65
lines changed

.vscode/settings.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
"Beamlines",
1717
"blxxi",
1818
"blxxt",
19+
"GRAPHICSMAGICK",
1920
"klogout",
21+
"Magick",
2022
"MVME"
2123
]
2224
}

docs/user/explanations/kubernetes_cluster.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ Overview
6868

6969
Argus is the production DLS cluster. It comprises 22 bare metal worker nodes, with a 3 node control plane that runs in VMs. The control plane nodes run the K8s master processes such as the API server, controller manager etc. Each control plane node runs an etcd backend.
7070

71-
.. image:: ../images/clusterHA.png
71+
.. figure:: ../images/clusterHA.png
7272

7373
To load balance across the K8s API running on the control plane nodes, there is a haproxy load balancer. The DNS endpoint argus.api.diamond.ac.uk (which all nodes use as the main API endpoint) points to a single haproxy IP. The IP is HA by virtue of a pair of VMs that both run haproxy, bind on all IPs, and use VRRP/keepalived to make sure the IP is always up. Haproxy has the 3 control plane nodes as a target backend.
7474

75-
.. image:: ../images/kubeadm-ha-topology-stacked-etcd.png
75+
.. figure:: ../images/kubeadm-ha-topology-stacked-etcd.png
7676

7777
The cluster uses Kubeadm to deploy the K8s control plane in containers. It is provided by K8s upstream, and is architecturally similar to Rancher Kubernetes Engine (RKE). Kubeadm supports upgrades/downgrades and easy provisioning of nodes. The cluster is connected using Weave as the CNI. Weave is the only CNI tested that passes Broadcast/Unicast/Multicast (BUM) traffic through the iptables that control network access for pods. Metallb is used as a component to support K8s loadBalancer Service objects. Ingress nginx from nginxinc is used as an ingress controller. Logs are collected from the stdout of all pods using a fluentd daemonset which ships logs to a centralized graylog server. Cluster authentication is via KeyCloak.
7878

@@ -81,7 +81,7 @@ The cluster sits in one rack, with a top of rack (TOR) switch/router connecting
8181

8282
**One of the Argus racks**
8383

84-
.. image:: ../images/argus3.jpg
84+
.. figure:: ../images/argus3.jpg
8585

8686
The cluster is built and managed using Ansible. Heavy use of the k8s module enables direct installation of K8s components by talking directly to the K8s API using the k8s module. Ansible also configures the haproxy API load balancer. Prometheus_operator provides the monitoring stack.
8787

docs/user/explanations/net_protocols.rst

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,13 @@ Initially we looked into workarounds to these issues. For example the
4848
diagram below shows a 'ca-forwarder' that sits on the EPICS client subnet
4949
and forwards requests to IOCs in the cluster.
5050

51-
.. image:: ../images/caforwarder.png
52-
:width: 1500px
53-
:align: center
51+
.. figure:: ../images/caforwarder.png
5452

5553
However this 2nd diagram shows why this approach fails when the client is in
5654
the cluster itself.
5755

5856

59-
.. image:: ../images/cabackwarder.png
60-
:width: 1500px
61-
:align: center
57+
.. figure:: ../images/cabackwarder.png
6258

6359
The conclusion of this study was that workarounds were fiddly and needed to be
6460
implemented on a per protocol basis, plus there is no guarantee that there

docs/user/explanations/repos.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
What is the /repos Folder?
2+
==========================
3+
4+
TODO: explain why we have a /repos folder and how it is
5+
mounted and synced with a the host to enable inside/outside
6+
access when debugging and testing container builds.
7+
8+
9+
.. figure:: ../images/repos_folder.png

docs/user/how-to/useful_k8s.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,7 @@ First you will need install `docker for WSL`_.
133133
You will also require an `X11 Server for Windows`_. When you run the server
134134
choose the option **Disable Access Control** as follows:
135135
136-
.. image:: ../images/vcxsrv.png
137-
:align: center
136+
.. figure:: ../images/vcxsrv.png
138137
139138
The networking for docker on WSL will not broadcast between containers so
140139
you need to use EPICS_CA_ADDR_LIST to get edm to see the example IOC

docs/user/images/ghcr.png

90.6 KB
Loading

docs/user/images/github_actions2.png

76.1 KB
Loading

docs/user/images/millie.png

776 KB
Loading

docs/user/images/repos_folder.png

61.4 KB
Loading

docs/user/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ side-bar.
5757
explanations/docs-structure
5858
explanations/repositories
5959
explanations/cli-tools
60+
explanations/repos
6061

6162
+++
6263

0 commit comments

Comments
 (0)