実行手順
1. 実行環境の構築・設定以下のページを参照して、実行環境の構築・設定を行います。
Kubernetes python clientでMicrok8sのnamespaceを列挙する
2. サンプルプログラムの作成と実行
以下のサンプルプログラムでMicrok8sの永続ボリューム/永続ボリューム要求/Deployment/Serviceを作成することが出来ます。ローカルストレージの永続ボリュームを使用するApache Httpdをデプロイ&サービス作成しています。
deploy-httpd.py
from kubernetes import config, client
from kubernetes.client.exceptions import ApiException
# 永続ボリュームの作成
def create_pv(api):
pv = client.V1PersistentVolume()
# 永続ボリューム名
pv.metadata = client.V1ObjectMeta(
name="local-httpd-pv"
)
pv.spec = client.V1PersistentVolumeSpec(
# 容量
capacity = {"storage":"50Mi"},
# local volume
local = client.V1LocalVolumeSource(path="/var/mywww/html"),
# アクセスモード
access_modes = [
"ReadOnlyMany"
],
# node affinityの設定
node_affinity = client.V1VolumeNodeAffinity(
required = client.V1NodeSelector(
node_selector_terms = [
client.V1NodeSelectorTerm(
match_expressions = [
client.V1NodeSelectorRequirement(
key = "kubernetes.io/hostname",
operator = "In",
values = ["ub2004server1"] # 適宜ホスト名を変更してください
)
]
)
]
)
),
# storage class設定
storage_class_name = "local-storage",
)
# 永続ボリュームを作成
api.create_persistent_volume(pv)
# 永続ボリューム要求の作成
def create_pvc(api, namespace):
pv = client.V1PersistentVolumeClaim()
pv.metadata = client.V1ObjectMeta(
name="local-httpd-pvc"
)
pv.spec = client.V1PersistentVolumeClaimSpec(
access_modes = [
"ReadOnlyMany"
],
resources = client.V1ResourceRequirements(
requests = {"storage": "50Mi"}
),
storage_class_name = "local-storage",
)
api.create_namespaced_persistent_volume_claim(namespace, pv)
# Deploymentの作成
def create_deployment(api, namespace):
dp = client.V1Deployment()
dp.metadata = client.V1ObjectMeta(
name="httpd-deployment",
labels={"app":"myhttpd"}
)
dp.spec = client.V1DeploymentSpec(
replicas = 1,
selector = client.V1LabelSelector(
match_labels = {"app":"myhttpd"}
),
template = client.V1PodTemplateSpec(
metadata = client.V1ObjectMeta(
labels={"app":"myhttpd"}
),
spec = client.V1PodSpec(
containers = [
client.V1Container(
name = "myhttpd",
image = "httpd:2.4-alpine",
ports = [
client.V1ContainerPort(container_port=80)
],
volume_mounts = [
client.V1VolumeMount(
name = "documentroot",
mount_path = "/usr/local/apache2/htdocs"
)
]
)
],
volumes = [
client.V1Volume(
name = "documentroot",
persistent_volume_claim = client.V1PersistentVolumeClaimVolumeSource(
claim_name = "local-httpd-pvc"
)
)
]
)
)
)
api.create_namespaced_deployment(namespace, dp)
# Serviceの作成
def create_service(api, namespace):
sv = client.V1Service()
sv.metadata = client.V1ObjectMeta(
name="httpd-service"
)
sv.spec = client.V1ServiceSpec(
selector = {"app":"myhttpd"},
type = "LoadBalancer",
external_i_ps = ["192.168.1.10"], # 適宜IPアドレスを変更してください
ports = [
client.V1ServicePort(
port = 8080,
target_port = 80,
protocol = "TCP"
)
]
)
api.create_namespaced_service(namespace, sv)
# configを読み込み
cfg = config.load_kube_config()
# クライアントを作成
with client.ApiClient(cfg) as api_client:
api = client.CoreV1Api(api_client)
namespace = 'default'
# 永続ボリュームの作成
try:
create_pv(api)
except ApiException as ex:
if ex.reason == 'Conflict':
print("already exists.")
else:
print(ex)
# 永続ボリューム要求の作成
try:
create_pvc(api, namespace)
except ApiException as ex:
if ex.reason == 'Conflict':
print("already exists.")
else:
print(ex)
# Deploymentの作成
try:
apps_api = client.AppsV1Api(api_client)
create_deployment(apps_api, namespace)
except ApiException as ex:
if ex.reason == 'Conflict':
print("already exists.")
else:
print(ex)
# Serviceの作成
try:
create_service(api, namespace)
except ApiException as ex:
if ex.reason == 'Conflict':
print("already exists.")
else:
print(ex)
・実行コマンド
python3 deploy-httpd.py
関連情報
・Kubernetes Python Clientのリポジトリhttps://github.com/kubernetes-client/python
・kubectlを使用して同様のデプロイを行う場合は、以下のページを参照してください。
Microk8sでlocal永続ボリュームを使用するApache Httpdをデプロイする
0 件のコメント:
コメントを投稿