<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=Deployment%2FKubernetes%2FRequirements</id>
	<title>Deployment/Kubernetes/Requirements - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=Deployment%2FKubernetes%2FRequirements"/>
	<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Requirements&amp;action=history"/>
	<updated>2026-07-06T05:20:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.4</generator>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Requirements&amp;diff=389&amp;oldid=prev</id>
		<title>Admin: Add Navbox deployment template before Related (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Requirements&amp;diff=389&amp;oldid=prev"/>
		<updated>2026-07-06T04:01:31Z</updated>

		<summary type="html">&lt;p&gt;Add Navbox deployment template before Related (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:31, 6 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 173:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 173:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* ☐ An S3-compatible bucket and credentials exist for backups.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* ☐ An S3-compatible bucket and credentials exist for backups.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* ☐ DNS records and a TLS certificate (e.g. a Let&#039;s Encrypt wildcard) are ready for your domains.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* ☐ DNS records and a TLS certificate (e.g. a Let&#039;s Encrypt wildcard) are ready for your domains.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Navbox deployment}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Requirements&amp;diff=206&amp;oldid=prev</id>
		<title>Admin: OHC identity seed</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Kubernetes/Requirements&amp;diff=206&amp;oldid=prev"/>
		<updated>2026-07-04T23:08:02Z</updated>

		<summary type="html">&lt;p&gt;OHC identity seed&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Doc header&lt;br /&gt;
|type=guide&lt;br /&gt;
|domain=deployment&lt;br /&gt;
|title=Requirements&lt;br /&gt;
|order=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This page lists what an operator needs in place before deploying Care. The reference deployment is a small, self-hosted Kubernetes cluster provisioned with &amp;lt;code&amp;gt;kubeadm&amp;lt;/code&amp;gt; and managed as infrastructure-as-code with [&amp;lt;nowiki/&amp;gt;https://opentofu.org/ OpenTofu]. Everything below is distilled from the deployment repository ([&amp;lt;nowiki/&amp;gt;https://github.com/ohcnetwork/deployment-k8 ohcnetwork/deployment-k8]); none of it requires a managed cloud platform, though the same shapes apply if you adapt them to one.&lt;br /&gt;
&lt;br /&gt;
Read the [[Deployment/Kubernetes/Reference architecture|reference architecture]] first if you want the bigger picture of how these pieces fit together.&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
&lt;br /&gt;
The reference is a &amp;#039;&amp;#039;&amp;#039;two-node cluster on a shared network&amp;#039;&amp;#039;&amp;#039; — one primary node and one secondary (failover) node — with replicated storage between them so the secondary can take over if the primary fails.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Requirement&lt;br /&gt;
! Reference value&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Nodes&lt;br /&gt;
| At least 2 Linux hosts&lt;br /&gt;
| One primary, one secondary/failover. Generalize the hostnames; the repo expects &amp;lt;code&amp;gt;primary_node_name&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;secondary_node_name&amp;lt;/code&amp;gt; as inputs.&lt;br /&gt;
|-&lt;br /&gt;
| Network&lt;br /&gt;
| Shared L2/L3 network between nodes&lt;br /&gt;
| Each node also needs a routable IP (&amp;lt;code&amp;gt;primary_node_ip&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;secondary_node_ip&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| Kubernetes&lt;br /&gt;
| Provisioned with &amp;lt;code&amp;gt;kubeadm&amp;lt;/code&amp;gt;&lt;br /&gt;
| The reference pins a specific &amp;lt;code&amp;gt;kubernetesVersion&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;kubeadm.yaml&amp;lt;/code&amp;gt;; match the deployer&amp;#039;s expected version rather than assuming &amp;amp;quot;latest&amp;amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| Pod / service networking&lt;br /&gt;
| Cilium CNI&lt;br /&gt;
| Pod and service subnets are set in the cluster config.&lt;br /&gt;
|-&lt;br /&gt;
| Storage&lt;br /&gt;
| Per-node volumes, replicated&lt;br /&gt;
| The reference separates fast (SSD) and bulk (HDD) data paths, e.g. &amp;lt;code&amp;gt;primary_ssd_data_path&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;primary_hdd_data_path&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;secondary_ssd_data_path&amp;lt;/code&amp;gt;. Replication across nodes is what gives the failover node a usable copy of the data.&lt;br /&gt;
|-&lt;br /&gt;
| Swap&lt;br /&gt;
| Permitted (not disabled)&lt;br /&gt;
| The reference kubelet config runs with swap enabled in a limited mode rather than forcing it off.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|1=The architecture notes describe storage replication as still evolving (RAID-with-replicas per volume is the target). Treat cross-node data replication as something you must design and verify for your environment, not as a turnkey feature.}}&lt;br /&gt;
&lt;br /&gt;
== Workstation tooling ==&lt;br /&gt;
&lt;br /&gt;
You drive the deployment from an operator workstation that can reach the cluster&amp;#039;s Kubernetes API. Install the following before you begin:&lt;br /&gt;
&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;kubectl&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; — to talk to the cluster.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;kubeadm&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; — to bootstrap the control plane and join nodes.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;OpenTofu (&amp;lt;code&amp;gt;tofu&amp;lt;/code&amp;gt;)&amp;#039;&amp;#039;&amp;#039; — the infrastructure is defined as Tofu modules and applied per stack.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;Helm&amp;#039;&amp;#039;&amp;#039; — several components are installed as Helm charts.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;Cilium CLI&amp;#039;&amp;#039;&amp;#039; — to install and inspect the CNI.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;Python 3&amp;#039;&amp;#039;&amp;#039; — the deployer (&amp;lt;code&amp;gt;deployer.py&amp;lt;/code&amp;gt;, driven via &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;) is a Python program.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;The deployer&amp;#039;s Python dependency&amp;#039;&amp;#039;&amp;#039; — install it into your environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pip install -r requirements.txt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This installs [&amp;lt;nowiki/&amp;gt;https://typer.tiangolo.com/ Typer] (&amp;lt;code&amp;gt;typer&amp;amp;gt;=0.9.0&amp;lt;/code&amp;gt;), which the &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; targets use to wrap Tofu and &amp;lt;code&amp;gt;kubectl&amp;lt;/code&amp;gt; runs. For example, the repo exposes targets such as &amp;lt;code&amp;gt;make apply-tofu-&amp;amp;lt;stack&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make apply-k8-&amp;amp;lt;stack&amp;amp;gt;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;make check-k8-cluster&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=Use a Python virtual environment for the deployer so its dependency does not collide with other tools on your workstation.}}&lt;br /&gt;
&lt;br /&gt;
== External dependencies ==&lt;br /&gt;
&lt;br /&gt;
These services are not part of the cluster bootstrap but the deployment expects them to exist (or be provisioned alongside it).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dependency&lt;br /&gt;
! Purpose&lt;br /&gt;
! Reference choice&lt;br /&gt;
|-&lt;br /&gt;
| Container registry&lt;br /&gt;
| Hosts the images the cluster pulls, including the locally built Care frontend image&lt;br /&gt;
| The reference &amp;#039;&amp;#039;&amp;#039;self-hosts&amp;#039;&amp;#039;&amp;#039; a registry using [&amp;lt;nowiki/&amp;gt;https://zotregistry.dev/ zot]. Any OCI-compatible registry works.&lt;br /&gt;
|-&lt;br /&gt;
| S3-compatible object storage&lt;br /&gt;
| Off-site target for backups (Postgres, OpenSearch, object-store syncs)&lt;br /&gt;
| Any S3-compatible endpoint — for example [&amp;lt;nowiki/&amp;gt;https://min.io/ MinIO] or DigitalOcean Spaces. Keep the endpoint and credentials as your own secrets.&lt;br /&gt;
|-&lt;br /&gt;
| DNS&lt;br /&gt;
| Resolves the public and internal hostnames for each service (Care API, Care frontend, object store, Odoo, Metabase, monitoring)&lt;br /&gt;
| The repo takes both public and local domain names per service as inputs.&lt;br /&gt;
|-&lt;br /&gt;
| TLS certificates&lt;br /&gt;
| HTTPS termination at the ingress&lt;br /&gt;
| [&amp;lt;nowiki/&amp;gt;https://letsencrypt.org/ Let&amp;#039;s Encrypt]; a pre-fetched wildcard certificate is the intended approach so the ingress can terminate TLS for every subdomain.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=Do not copy hardcoded node names, internal domains, object-storage endpoints, or any credentials out of the deployment repository. Those are one operator&amp;#039;s environment. Substitute your own values — for example &amp;lt;code&amp;gt;&amp;amp;lt;primary-node&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;your-domain.example&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;s3-endpoint&amp;amp;gt;&amp;lt;/code&amp;gt; — and keep secrets out of version control.}}&lt;br /&gt;
&lt;br /&gt;
== What gets deployed ==&lt;br /&gt;
&lt;br /&gt;
The cluster runs Care plus its data stores and a few adjacent applications. Use this table to size your nodes and storage. &amp;amp;quot;Persistent&amp;amp;quot; means the component needs a persistent volume that survives pod restarts and is included in backups; &amp;amp;quot;non-persistent&amp;amp;quot; means it can be recreated from scratch with no data loss.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Component&lt;br /&gt;
! Shape&lt;br /&gt;
! Storage&lt;br /&gt;
! Backups&lt;br /&gt;
|-&lt;br /&gt;
| Care backend&lt;br /&gt;
| Multiple web workers + Celery workers + a Celery scheduler&lt;br /&gt;
| None (stateless)&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| Care frontend&lt;br /&gt;
| Served via nginx; image built locally and pushed to the registry&lt;br /&gt;
| None (stateless)&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL (Care)&lt;br /&gt;
| Production mode, single primary&lt;br /&gt;
| Persistent&lt;br /&gt;
| Daily/configurable, to disk and optionally to S3-compatible storage&lt;br /&gt;
|-&lt;br /&gt;
| Redis&lt;br /&gt;
| Cache/broker, non-persistent mode&lt;br /&gt;
| None&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| OpenSearch&lt;br /&gt;
| Single node, minimal configuration&lt;br /&gt;
| Persistent&lt;br /&gt;
| Daily/configurable, to external media&lt;br /&gt;
|-&lt;br /&gt;
| Object store&lt;br /&gt;
| Self-hosted S3-compatible store for uploads, audit logs, and public data&lt;br /&gt;
| Persistent&lt;br /&gt;
| Incremental syncs to external storage&lt;br /&gt;
|-&lt;br /&gt;
| Odoo&lt;br /&gt;
| Web workers + Celery workers (with autoscaling)&lt;br /&gt;
| Via its database&lt;br /&gt;
| See Odoo Postgres&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL (Odoo)&lt;br /&gt;
| Dedicated instance, same hardening as Care&amp;#039;s Postgres&lt;br /&gt;
| Persistent&lt;br /&gt;
| Daily/configurable, to external media&lt;br /&gt;
|-&lt;br /&gt;
| Metabase&lt;br /&gt;
| Analytics app (with autoscaling)&lt;br /&gt;
| Via its database&lt;br /&gt;
| See Metabase Postgres&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL (Metabase)&lt;br /&gt;
| Dedicated instance, same hardening as Care&amp;#039;s Postgres&lt;br /&gt;
| Persistent&lt;br /&gt;
| Daily/configurable backups of its volume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Alongside the application components, the cluster also provides:&lt;br /&gt;
&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;Load balancing&amp;#039;&amp;#039;&amp;#039; — in front of the cluster, with separate load balancing for the object store and for Metabase where that isolation helps.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;WAF / firewall routing&amp;#039;&amp;#039;&amp;#039; — at the ingress, so traffic is filtered before it reaches application pods.&lt;br /&gt;
* ☐ &amp;#039;&amp;#039;&amp;#039;Central logging&amp;#039;&amp;#039;&amp;#039; — file-based logging to a persistent volume, with the ability to pipe logs to external destinations.&lt;br /&gt;
&lt;br /&gt;
{{Info|1=The deployment also targets &amp;#039;&amp;#039;&amp;#039;auto-restore&amp;#039;&amp;#039;&amp;#039;: a fresh cluster should be rebuildable from the backups above. That capability depends on every persistent component having a working, tested backup. Confirm your backups restore before you rely on them — see [[Deployment/Kubernetes/Day-2 operations|day-2 operations]].}}&lt;br /&gt;
&lt;br /&gt;
== Before you proceed ==&lt;br /&gt;
&lt;br /&gt;
You are ready to start [[Deployment/Kubernetes/Provisioning the cluster|provisioning the cluster]] once you can check every box:&lt;br /&gt;
&lt;br /&gt;
* ☐ Two (or more) Linux nodes are reachable on a shared network, with their IPs and data paths chosen.&lt;br /&gt;
* ☐ Your workstation has &amp;lt;code&amp;gt;kubectl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kubeadm&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tofu&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;helm&amp;lt;/code&amp;gt;, and the Cilium CLI installed.&lt;br /&gt;
* ☐ Python 3 is available and &amp;lt;code&amp;gt;pip install -r requirements.txt&amp;lt;/code&amp;gt; has succeeded.&lt;br /&gt;
* ☐ A container registry is reachable (self-hosted or managed).&lt;br /&gt;
* ☐ An S3-compatible bucket and credentials exist for backups.&lt;br /&gt;
* ☐ DNS records and a TLS certificate (e.g. a Let&amp;#039;s Encrypt wildcard) are ready for your domains.&lt;br /&gt;
&lt;br /&gt;
{{Related}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>