Create sample scripts for generating k8s upgrade patches

Provide a make_kube_patch.sh script that will build patches
that can be used to upgrade kubernetes. Also includes sample
preapply/preremove scripts that will be included in the
patches.

Change-Id: Ifab05e9d407d9a7c3d8c519c90add1b3857ecdf2
Story: 2006781
Task: 38479
Signed-off-by: Bart Wensley <barton.wensley@windriver.com>
This commit is contained in:
Bart Wensley 2020-01-27 13:57:36 -06:00
parent dc441b0b52
commit defa24cbaa
5 changed files with 268 additions and 0 deletions

View File

@ -0,0 +1,55 @@
#!/usr/bin/python
"""
Copyright (c) 2020 Wind River Systems, Inc.
SPDX-License-Identifier: Apache-2.0
"""
from kubernetes import client, config
from distutils.version import LooseVersion
import sys
patch_states = {}
def fatal_error(message):
print(message)
sys.exit(1)
def get_kube_apiserver_versions():
config.load_kube_config('/etc/kubernetes/admin.conf')
versions = []
v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)
for item in ret.items:
if item.metadata.labels.get('component') == 'kube-apiserver':
for c in item.spec.containers:
if c.name == 'kube-apiserver':
versions.append(c.image.split(':')[-1])
return versions
def main():
running_versions = get_kube_apiserver_versions()
if len(running_versions) is 0:
fatal_error("Could not determine kube-apiserver version")
# Running version must be at least v1.16.1
test_version = 'v1.16.1'
for running_version in running_versions:
if LooseVersion(running_version) < LooseVersion(test_version):
fatal_error("A kube-apiserver is running %s, but must be at least %s" %
(running_version, test_version))
# Success
sys.exit(0)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,56 @@
#!/usr/bin/python
"""
Copyright (c) 2020 Wind River Systems, Inc.
SPDX-License-Identifier: Apache-2.0
"""
from kubernetes import client, config
from distutils.version import LooseVersion
import sys
patch_states = {}
def fatal_error(message):
print(message)
sys.exit(1)
def get_kube_apiserver_versions():
config.load_kube_config('/etc/kubernetes/admin.conf')
versions = []
v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)
for item in ret.items:
if item.metadata.labels.get('component') == 'kube-apiserver':
for c in item.spec.containers:
if c.name == 'kube-apiserver':
versions.append(c.image.split(':')[-1])
return versions
def main():
running_versions = get_kube_apiserver_versions()
if len(running_versions) is 0:
fatal_error("Could not determine kube-apiserver version")
# Running version must be no higher than v1.16.1
test_version = 'v1.16.1'
for running_version in running_versions:
if LooseVersion(running_version) > LooseVersion(test_version):
fatal_error("A kube-apiserver is running %s, but must be no higher than %s" %
(running_version, test_version))
# Success
sys.exit(0)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,56 @@
#!/usr/bin/python
"""
Copyright (c) 2020 Wind River Systems, Inc.
SPDX-License-Identifier: Apache-2.0
"""
from kubernetes import client, config
from distutils.version import LooseVersion
import sys
patch_states = {}
def fatal_error(message):
print(message)
sys.exit(1)
def get_kube_apiserver_versions():
config.load_kube_config('/etc/kubernetes/admin.conf')
versions = []
v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)
for item in ret.items:
if item.metadata.labels.get('component') == 'kube-apiserver':
for c in item.spec.containers:
if c.name == 'kube-apiserver':
versions.append(c.image.split(':')[-1])
return versions
def main():
running_versions = get_kube_apiserver_versions()
if len(running_versions) is 0:
fatal_error("Could not determine kube-apiserver version")
# Running version must be at least v1.16.2
test_version = 'v1.16.2'
for running_version in running_versions:
if LooseVersion(running_version) < LooseVersion(test_version):
fatal_error("A kube-apiserver is running %s, but must be at least %s" %
(running_version, test_version))
# Success
sys.exit(0)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,57 @@
#!/usr/bin/python
"""
Copyright (c) 2020 Wind River Systems, Inc.
SPDX-License-Identifier: Apache-2.0
"""
from kubernetes import client, config
from distutils.version import LooseVersion
import sys
patch_states = {}
def fatal_error(message):
print(message)
sys.exit(1)
def get_kube_apiserver_versions():
config.load_kube_config('/etc/kubernetes/admin.conf')
versions = []
v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)
for item in ret.items:
if item.metadata.labels.get('component') == 'kube-apiserver':
for c in item.spec.containers:
if c.name == 'kube-apiserver':
versions.append(c.image.split(':')[-1])
return versions
def main():
running_versions = get_kube_apiserver_versions()
if len(running_versions) is 0:
fatal_error("Could not determine kube-apiserver version")
# Running version must be no higher than v1.16.2
test_version = 'v1.16.2'
for running_version in running_versions:
if LooseVersion(running_version) > LooseVersion(test_version):
fatal_error("A kube-apiserver is running %s, but must be no higher than %s" %
(running_version, test_version))
# Success
sys.exit(0)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,44 @@
#!/bin/bash
#
# Copyright (c) 2020 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# This builds 3 patches:
# SYSINV.1 contains sysinv components
# KUBE.1 contains kubeadm
# KUBE.2 contains the remainder (node, client, master, etc..)
PATH=$MY_REPO/stx/stx-update/extras/scripts:$PATH
SYSINV_PATCH_1=SYSINV.1
KUBE_PATCH_1=KUBE.1
KUBE_PATCH_2=KUBE.2
SEMANTIC_PATH=`dirname "$0"`
DIR=${MY_WORKSPACE}/std/rpmbuild/RPMS
SYSINV_SUFFIX=1.0-342.tis.x86_64.rpm
KUBE_SUFFIX=1.16.2-1.tis.1.x86_64.rpm
patch_build.sh \
--id ${SYSINV_PATCH_1} \
--reboot-required=N \
${DIR}/sysinv-${SYSINV_SUFFIX}
patch_build.sh \
--id ${KUBE_PATCH_1} \
--reboot-required=N \
--pre-apply ${SEMANTIC_PATH}/KUBE.1.preapply \
--pre-remove ${SEMANTIC_PATH}/KUBE.1.preremove \
--req ${SYSINV_PATCH_1} \
${DIR}/kubernetes-kubeadm-${KUBE_SUFFIX}
patch_build.sh \
--id ${KUBE_PATCH_2} \
--reboot-required=N \
--pre-apply ${SEMANTIC_PATH}/KUBE.2.preapply \
--pre-remove ${SEMANTIC_PATH}/KUBE.2.preremove \
--req ${KUBE_PATCH_1} \
${DIR}/kubernetes-node-${KUBE_SUFFIX} \
${DIR}/kubernetes-client-${KUBE_SUFFIX} \
${DIR}/kubernetes-${KUBE_SUFFIX} \
${DIR}/kubernetes-master-${KUBE_SUFFIX}