mirror of https://github.com/k3s-io/k3s
kube-addons: Use python container if python is not found on the machine.
To build the python image, BUILD_PYTHON_IMAGE should be set during make. When the addon script is running, it will check if python is installed on the machine, if not, it will use the python image that built previously.pull/6/head
parent
41cb3d6a39
commit
516032f336
|
@ -819,6 +819,16 @@ function kube::release::write_addon_docker_images_for_server() {
|
|||
) &
|
||||
done
|
||||
|
||||
if [[ ! -z "${BUILD_PYTHON_IMAGE:-}" ]]; then
|
||||
(
|
||||
kube::log::status "Building Docker python image"
|
||||
|
||||
local img_name=python:2.7-slim-pyyaml
|
||||
docker build -t "${img_name}" "${KUBE_ROOT}/cluster/addons/python-image"
|
||||
docker save "${img_name}" > "${1}/${img_name}.tar"
|
||||
) &
|
||||
fi
|
||||
|
||||
kube::util::wait-for-jobs || { kube::log::error "unable to pull or write addon image"; return 1; }
|
||||
kube::log::status "Addon images done"
|
||||
)
|
||||
|
|
|
@ -58,6 +58,8 @@ of:
|
|||
pods.
|
||||
1. Note that this cannot happen for Services as their version is always empty.
|
||||
|
||||
Note that in order to run the updator script, python is required on the machine.
|
||||
For OS distros that don't have python installed, a python container will be used.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
FROM python:2.7-slim
|
||||
|
||||
RUN pip install pyyaml
|
|
@ -0,0 +1,6 @@
|
|||
# Python image
|
||||
|
||||
The python image here is used by OS distros that don't have python installed to
|
||||
run python scripts to parse the yaml files in the addon updator script.
|
||||
|
||||
[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/cluster/addons/python-image/README.md?pixel)]()
|
|
@ -98,7 +98,7 @@ function log() {
|
|||
function get-object-kind-from-file() {
|
||||
# prints to stdout, so log cannot be used
|
||||
#WARNING: only yaml is supported
|
||||
cat $1 | python -c '''
|
||||
cat $1 | ${PYTHON} -c '''
|
||||
try:
|
||||
import pipes,sys,yaml
|
||||
y = yaml.load(sys.stdin)
|
||||
|
@ -120,7 +120,7 @@ function get-object-nsname-from-file() {
|
|||
# prints to stdout, so log cannot be used
|
||||
#WARNING: only yaml is supported
|
||||
#addons that do not specify a namespace are assumed to be in "default".
|
||||
cat $1 | python -c '''
|
||||
cat $1 | ${PYTHON} -c '''
|
||||
try:
|
||||
import pipes,sys,yaml
|
||||
y = yaml.load(sys.stdin)
|
||||
|
|
|
@ -24,6 +24,16 @@ ADDON_CHECK_INTERVAL_SEC=${TEST_ADDON_CHECK_INTERVAL_SEC:-600}
|
|||
SYSTEM_NAMESPACE=kube-system
|
||||
token_dir=${TOKEN_DIR:-/srv/kubernetes}
|
||||
|
||||
function ensure_python() {
|
||||
if ! python --version > /dev/null 2>&1; then
|
||||
echo "No python on the machine, will use a python image"
|
||||
local -r PYTHON_IMAGE=python:2.7-slim-pyyaml
|
||||
export PYTHON="docker run --interactive --rm --net=none ${PYTHON_IMAGE} python"
|
||||
else
|
||||
export PYTHON=python
|
||||
fi
|
||||
}
|
||||
|
||||
function create-kubeconfig-secret() {
|
||||
local -r token=$1
|
||||
local -r username=$2
|
||||
|
@ -152,11 +162,16 @@ function load-docker-images() {
|
|||
# managed result is of that. Start everything below that directory.
|
||||
echo "== Kubernetes addon manager started at $(date -Is) with ADDON_CHECK_INTERVAL_SEC=${ADDON_CHECK_INTERVAL_SEC} =="
|
||||
|
||||
# Load any images that we may need
|
||||
load-docker-images /srv/salt/kube-addons-images
|
||||
|
||||
ensure_python
|
||||
|
||||
# Load the kube-env, which has all the environment variables we care
|
||||
# about, in a flat yaml format.
|
||||
kube_env_yaml="/var/cache/kubernetes-install/kube_env.yaml"
|
||||
if [ ! -e "${kubelet_kubeconfig_file}" ]; then
|
||||
eval $(python -c '''
|
||||
eval $(${PYTHON} -c '''
|
||||
import pipes,sys,yaml
|
||||
|
||||
for k,v in yaml.load(sys.stdin).iteritems():
|
||||
|
@ -164,8 +179,6 @@ for k,v in yaml.load(sys.stdin).iteritems():
|
|||
''' < "${kube_env_yaml}")
|
||||
fi
|
||||
|
||||
# Load any images that we may need
|
||||
load-docker-images /srv/salt/kube-addons-images
|
||||
|
||||
# Create the namespace that will be used to host the cluster-level add-ons.
|
||||
start_addon /etc/kubernetes/addons/namespace.yaml 100 10 "" &
|
||||
|
|
Loading…
Reference in New Issue