Browse Source
Deploy kubelet and kube-apiserver as containers
Deploy kubelet and kube-apiserver as containers
kubelet via docker kube-apiserver as a static pod Fixed etcd service start to be more tolerant of slow start. Workaround for kube_version to stay in download role, but not download an files by creating a new "nothing" download entry.pull/363/head
19 changed files with 86 additions and 346 deletions
Split View
Diff Options
-
20roles/download/defaults/main.yml
-
10roles/download/vars/kube_versions.yml
-
2roles/kubernetes/master/meta/main.yml
-
62roles/kubernetes/master/tasks/main.yml
-
25roles/kubernetes/master/tasks/pre-upgrade.yml
-
22roles/kubernetes/master/tasks/start.yml
-
118roles/kubernetes/master/templates/deb-kube-apiserver.initd.j2
-
58roles/kubernetes/master/templates/kube-apiserver.j2
-
30roles/kubernetes/master/templates/kube-apiserver.service.j2
-
21roles/kubernetes/master/templates/manifests/kube-apiserver.manifest.j2
-
4roles/kubernetes/node/meta/main.yml
-
6roles/kubernetes/node/tasks/install.yml
-
2roles/kubernetes/node/tasks/main.yml
-
15roles/kubernetes/node/templates/kubelet-container.j2
-
7roles/kubernetes/node/templates/kubelet.j2
-
5roles/kubernetes/node/templates/kubelet.service.j2
-
2roles/network_plugin/calico/templates/calicoctl-container.j2
-
18roles/uploads/defaults/main.yml
-
5roles/uploads/vars/kube_versions.yml
@ -1,22 +1,12 @@ |
|||
kube_checksum: |
|||
v1.2.2: |
|||
kube_apiserver: eb1bfd8b877052cbd1991b8c429a1d06661f4cb019905e20e128174f724e16de |
|||
kubectl: 473e6924569fba30d4a50cecdc2cae5f31d97d1f662463e85b74a472105dcff4 |
|||
kubelet: f16827dc7e7c82f0e215f0fc73eb01e2dfe91a2ec83f9cbcaf8d37c91b64fd3b |
|||
v1.2.3: |
|||
kube_apiserver_checksum: ebaeeeb72cb29b358337b330617a96355ff2d08a5a523fc1a81beba36cc9d6f9 |
|||
kubectl_checksum: 394853edd409a721bcafe4f1360009ef9f845050719fe7d6fc7176f45cc92a8c |
|||
kubelet_checksum: 633bb41c51c5c0df0645dd60ba82b12eba39d009eb87bae9227de7d9a89c0797 |
|||
v1.2.4: |
|||
kube_apiserver: 6ac99b36b02968459e026fcfc234207c66064b5e11816b69dd8fc234b2ffec1e |
|||
kubectl: dac61fbd506f7a17540feca691cd8a9d9d628d59661eebce788a50511f578897 |
|||
kubelet: 4adaf40592248eef6fd4fa126464915ea41e624a70dc77178089760ed235e341 |
|||
v1.2.5: |
|||
kube_apiserver: fbe8296ad4b194c06f6802a126d35cd2887dc1aded308d4da2b580f270412b33 |
|||
kubectl: 5526a496a84701015485e32c86486e2f23599f7a865164f546e619c6a62f7f19 |
|||
kubelet: cd15b929f0190876216f397c2c6e7aa8c08d3b047fd90b4980cd68c8f4896211 |
|||
v1.3.0: |
|||
kube_apiserver: 431cd312984a29f45590138e990d5c4d537b069b71f2587a72414fabc4fcffdd |
|||
kubectl: f40b2d0ff33984e663a0dea4916f1cb9041abecc09b11f9372cdb8049ded95dc |
|||
kubelet: bd5f10ccb95fe6e95ddf7ad8a119195c27cb2bce4be6f80c1810ff1a2111496d |
|||
kube_version: v1.3.0 |
@ -0,0 +1,25 @@ |
|||
--- |
|||
- name: "Pre-upgrade | check for kube-apiserver unit file" |
|||
stat: |
|||
path: /etc/systemd/system/kube-apiserver.service |
|||
register: kube_apiserver_service_file |
|||
|
|||
- name: "Pre-upgrade | check for kube-apiserver init script" |
|||
stat: |
|||
path: /etc/init.d/kube-apiserver |
|||
register: kube_apiserver_init_script |
|||
|
|||
- name: "Pre-upgrade | stop kube-apiserver if service defined" |
|||
service: |
|||
name: kube-apiserver |
|||
state: stopped |
|||
when: (kube_apiserver_service_file.stat.exists|default(False) or kube_apiserver_init_script.stat.exists|default(False)) |
|||
|
|||
- name: "Pre-upgrade | remove kube-apiserver service definition" |
|||
file: |
|||
path: "{{ item }}" |
|||
state: absent |
|||
when: (kube_apiserver_service_file.stat.exists|default(False) or kube_apiserver_init_script.stat.exists|default(False)) |
|||
with_items: |
|||
- /etc/systemd/system/kube-apiserver.service |
|||
- /etc/init.d/kube-apiserver |
@ -1,22 +0,0 @@ |
|||
--- |
|||
- name: Pause |
|||
pause: seconds=10 |
|||
|
|||
- name: reload systemd |
|||
command: systemctl daemon-reload |
|||
when: ansible_service_mgr == "systemd" and restart_apimaster is defined and restart_apimaster == True |
|||
|
|||
- name: reload kube-apiserver |
|||
service: |
|||
name: kube-apiserver |
|||
state: restarted |
|||
enabled: yes |
|||
when: ( restart_apimaster is defined and restart_apimaster == True) or |
|||
secret_changed | default(false) |
|||
|
|||
- name: Enable apiserver |
|||
service: |
|||
name: kube-apiserver |
|||
enabled: yes |
|||
state: started |
|||
when: restart_apimaster is not defined or restart_apimaster == False |
@ -1,118 +0,0 @@ |
|||
#!/bin/bash |
|||
# |
|||
### BEGIN INIT INFO |
|||
# Provides: kube-apiserver |
|||
# Required-Start: $local_fs $network $syslog |
|||
# Required-Stop: |
|||
# Default-Start: 2 3 4 5 |
|||
# Default-Stop: 0 1 6 |
|||
# Short-Description: The Kubernetes apiserver |
|||
# Description: |
|||
# The Kubernetes apiserver. |
|||
### END INIT INFO |
|||
|
|||
|
|||
# PATH should only include /usr/* if it runs after the mountnfs.sh script |
|||
PATH=/sbin:/usr/sbin:/bin:/usr/bin |
|||
DESC="The Kubernetes apiserver" |
|||
NAME=kube-apiserver |
|||
DAEMON={{ bin_dir }}/kube-apiserver |
|||
DAEMON_LOG_FILE=/var/log/$NAME.log |
|||
PIDFILE=/var/run/$NAME.pid |
|||
SCRIPTNAME=/etc/init.d/$NAME |
|||
DAEMON_USER=root |
|||
|
|||
# Exit if the package is not installed |
|||
[ -x "$DAEMON" ] || exit 0 |
|||
|
|||
# Read configuration variable file if it is present |
|||
[ -r /etc/kubernetes/$NAME.env ] && . /etc/kubernetes/$NAME.env |
|||
|
|||
# Define LSB log_* functions. |
|||
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present |
|||
# and status_of_proc is working. |
|||
. /lib/lsb/init-functions |
|||
|
|||
# |
|||
# Function that starts the daemon/service |
|||
# |
|||
do_start() |
|||
{ |
|||
# Return |
|||
# 0 if daemon has been started |
|||
# 1 if daemon was already running |
|||
# 2 if daemon could not be started |
|||
start-stop-daemon --start --quiet --background --no-close \ |
|||
--make-pidfile --pidfile $PIDFILE \ |
|||
--exec $DAEMON -c $DAEMON_USER --test > /dev/null \ |
|||
|| return 1 |
|||
start-stop-daemon --start --quiet --background --no-close \ |
|||
--make-pidfile --pidfile $PIDFILE \ |
|||
--exec $DAEMON -c $DAEMON_USER -- \ |
|||
$DAEMON_ARGS >> $DAEMON_LOG_FILE 2>&1 \ |
|||
|| return 2 |
|||
} |
|||
|
|||
# |
|||
# Function that stops the daemon/service |
|||
# |
|||
do_stop() |
|||
{ |
|||
# Return |
|||
# 0 if daemon has been stopped |
|||
# 1 if daemon was already stopped |
|||
# 2 if daemon could not be stopped |
|||
# other if a failure occurred |
|||
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME |
|||
RETVAL="$?" |
|||
[ "$RETVAL" = 2 ] && return 2 |
|||
# Many daemons don't delete their pidfiles when they exit. |
|||
rm -f $PIDFILE |
|||
return "$RETVAL" |
|||
} |
|||
|
|||
|
|||
case "$1" in |
|||
start) |
|||
log_daemon_msg "Starting $DESC" "$NAME" |
|||
do_start |
|||
case "$?" in |
|||
0|1) log_end_msg 0 || exit 0 ;; |
|||
2) log_end_msg 1 || exit 1 ;; |
|||
esac |
|||
;; |
|||
stop) |
|||
log_daemon_msg "Stopping $DESC" "$NAME" |
|||
do_stop |
|||
case "$?" in |
|||
0|1) log_end_msg 0 ;; |
|||
2) exit 1 ;; |
|||
esac |
|||
;; |
|||
status) |
|||
status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $? |
|||
;; |
|||
|
|||
restart|force-reload) |
|||
log_daemon_msg "Restarting $DESC" "$NAME" |
|||
do_stop |
|||
case "$?" in |
|||
0|1) |
|||
do_start |
|||
case "$?" in |
|||
0) log_end_msg 0 ;; |
|||
1) log_end_msg 1 ;; # Old process is still running |
|||
*) log_end_msg 1 ;; # Failed to start |
|||
esac |
|||
;; |
|||
*) |
|||
# Failed to stop |
|||
log_end_msg 1 |
|||
;; |
|||
esac |
|||
;; |
|||
*) |
|||
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 |
|||
exit 3 |
|||
;; |
|||
esac |
@ -1,58 +0,0 @@ |
|||
### |
|||
# kubernetes system config |
|||
# |
|||
# The following values are used to configure the kube-apiserver |
|||
|
|||
{% if ansible_service_mgr in ["sysvinit","upstart"] %} |
|||
# Logging directory |
|||
KUBE_LOGGING="--log-dir={{ kube_log_dir }} --logtostderr=true" |
|||
{% else %} |
|||
# logging to stderr means we get it in the systemd journal |
|||
KUBE_LOGGING="--logtostderr=true" |
|||
{% endif %} |
|||
|
|||
# Apiserver Log level, 0 is debug |
|||
KUBE_LOG_LEVEL="--v={{ kube_log_level | default('2') }}" |
|||
|
|||
# Should this cluster be allowed to run privileged docker containers |
|||
KUBE_ALLOW_PRIV="--allow_privileged=true" |
|||
|
|||
# The port on the local server to listen on. |
|||
KUBE_API_PORT="--insecure-port={{kube_apiserver_insecure_port}} --secure-port={{ kube_apiserver_port }}" |
|||
|
|||
# Insecure API address (default is localhost) |
|||
KUBE_API_INSECURE_BIND="--insecure-bind-address={{ kube_apiserver_insecure_bind_address | default('127.0.0.1') }}" |
|||
|
|||
# Address range to use for services |
|||
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range={{ kube_service_addresses }}" |
|||
|
|||
# Location of the etcd cluster |
|||
KUBE_ETCD_SERVERS="--etcd_servers={{ etcd_access_endpoint }}" |
|||
|
|||
# Bind address for secure endpoint |
|||
KUBE_API_ADDRESS="--bind-address={{ ip | default(ansible_default_ipv4.address) }}" |
|||
|
|||
# default admission control policies |
|||
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota" |
|||
|
|||
# RUNTIME API CONFIGURATION (e.g. enable extensions) |
|||
KUBE_RUNTIME_CONFIG="{% if kube_api_runtime_config is defined %}{% for conf in kube_api_runtime_config %}--runtime-config={{ conf }} {% endfor %}{% endif %}" |
|||
|
|||
# TLS CONFIGURATION |
|||
KUBE_TLS_CONFIG="--tls_cert_file={{ kube_cert_dir }}/apiserver.pem --tls_private_key_file={{ kube_cert_dir }}/apiserver-key.pem --client_ca_file={{ kube_cert_dir }}/ca.pem" |
|||
|
|||
# Add you own! |
|||
KUBE_API_ARGS="--token_auth_file={{ kube_token_dir }}/known_tokens.csv --basic-auth-file={{ kube_users_dir }}/known_users.csv --service_account_key_file={{ kube_cert_dir }}/apiserver-key.pem --advertise-address={{ ip | default(ansible_default_ipv4.address) }}" |
|||
|
|||
{% if cloud_provider is defined and cloud_provider == "openstack" %} |
|||
KUBELET_CLOUDPROVIDER="--cloud-provider={{ cloud_provider }} --cloud-config={{ kube_config_dir }}/cloud_config" |
|||
{% else %} |
|||
{# TODO: gce and aws don't need the cloud provider to be set? #} |
|||
KUBELET_CLOUDPROVIDER="" |
|||
{% endif %} |
|||
|
|||
{% if ansible_service_mgr in ["sysvinit","upstart"] %} |
|||
DAEMON_ARGS="$KUBE_LOGGING $KUBE_LOG_LEVEL $KUBE_ALLOW_PRIV $KUBE_API_PORT $KUBE_API_INSECURE_BIND \ |
|||
$KUBE_SERVICE_ADDRESSES $KUBE_ETCD_SERVERS $KUBE_ADMISSION_CONTROL $KUBE_RUNTIME_CONFIG \ |
|||
$KUBE_TLS_CONFIG $KUBE_API_ARGS $KUBELET_CLOUDPROVIDER" |
|||
{% endif %} |
@ -1,30 +0,0 @@ |
|||
[Unit] |
|||
Description=Kubernetes API Server |
|||
Documentation=https://github.com/GoogleCloudPlatform/kubernetes |
|||
Wants=etcd-proxy.service |
|||
After=etcd-proxy.service |
|||
|
|||
[Service] |
|||
EnvironmentFile=/etc/kubernetes/kube-apiserver.env |
|||
User=kube |
|||
ExecStart={{ bin_dir }}/kube-apiserver \ |
|||
$KUBE_LOGTOSTDERR \ |
|||
$KUBE_LOG_LEVEL \ |
|||
$KUBE_ETCD_SERVERS \ |
|||
$KUBE_API_ADDRESS \ |
|||
$KUBE_API_PORT \ |
|||
$KUBE_API_INSECURE_BIND \ |
|||
$KUBELET_PORT \ |
|||
$KUBE_ALLOW_PRIV \ |
|||
$KUBE_SERVICE_ADDRESSES \ |
|||
$KUBE_ADMISSION_CONTROL \ |
|||
$KUBE_RUNTIME_CONFIG \ |
|||
$KUBE_TLS_CONFIG \ |
|||
$KUBE_API_ARGS \ |
|||
$KUBELET_CLOUDPROVIDER |
|||
Restart=on-failure |
|||
Type=notify |
|||
LimitNOFILE=65536 |
|||
|
|||
[Install] |
|||
WantedBy=multi-user.target |
@ -1,5 +1,5 @@ |
|||
--- |
|||
dependencies: |
|||
- role: download |
|||
file: "{{ downloads.kubernetes_kubelet }}" |
|||
- role: download #For kube_version |
|||
file: "{{ downloads.nothing }}" |
|||
- role: kubernetes/secrets |
@ -0,0 +1,15 @@ |
|||
#!/bin/bash |
|||
/usr/bin/docker run --privileged --rm \ |
|||
--net=host --pid=host --name=kubelet \ |
|||
-v /etc/cni:/etc/cni:ro \ |
|||
-v /opt/cni:/opt/cni:ro \ |
|||
-v /etc/kubernetes:/etc/kubernetes \ |
|||
-v /sys:/sys \ |
|||
-v /dev:/dev \ |
|||
-v /var/lib/docker:/var/lib/docker \ |
|||
-v /var/run:/var/run \ |
|||
-v /var/lib/kubelet:/var/lib/kubelet \ |
|||
{{ hyperkube_image_repo }}:{{ hyperkube_image_tag}} \ |
|||
nsenter --target=1 --mount --wd=. -- \ |
|||
./hyperkube kubelet \ |
|||
$@ |
Write
Preview
Loading…
Cancel
Save