Browse Source
etcd directly in host
etcd directly in host
fix etcd configuration for nodes fix wrong calico checksums using a var name etcd_bin_dir fix etcd handlers for sysvinit using a var name etcd_bin_dir sysvinit script review etcd configurationpull/72/head
11 changed files with 233 additions and 76 deletions
Unified View
Diff Options
-
6README.md
-
30roles/download/defaults/main.yml
-
3roles/etcd/defaults/main.yml
-
14roles/etcd/handlers/main.yml
-
27roles/etcd/tasks/configure.yml
-
14roles/etcd/tasks/install.yml
-
13roles/etcd/tasks/main.yml
-
113roles/etcd/templates/deb-etcd.initd.j2
-
54roles/etcd/templates/etcd-pod.yml
-
17roles/etcd/templates/etcd.j2
-
18roles/etcd/templates/etcd.service.j2
@ -0,0 +1,3 @@ |
|||||
|
--- |
||||
|
etcd_version: v2.2.4 |
||||
|
etcd_bin_dir: "{{ local_release_dir }}/etcd/etcd-{{ etcd_version }}-linux-amd64/" |
@ -0,0 +1,14 @@ |
|||||
|
--- |
||||
|
- name: restart systemd-etcd |
||||
|
command: /bin/true |
||||
|
notify: |
||||
|
- reload systemd |
||||
|
- restart etcd |
||||
|
|
||||
|
- name: reload systemd |
||||
|
command: systemctl daemon-reload |
||||
|
|
||||
|
- name: restart etcd |
||||
|
service: |
||||
|
name: etcd |
||||
|
state: restarted |
@ -0,0 +1,27 @@ |
|||||
|
--- |
||||
|
- name: Copy etcd.service systemd file |
||||
|
template: |
||||
|
src: etcd.service.j2 |
||||
|
dest: /lib/systemd/system/etcd.service |
||||
|
backup: yes |
||||
|
when: init_system == "systemd" |
||||
|
notify: |
||||
|
- restart systemd-etcd |
||||
|
|
||||
|
- name: Write calico-node initd script |
||||
|
template: |
||||
|
src: deb-etcd.initd.j2 |
||||
|
dest: /etc/init.d/etcd |
||||
|
owner: root |
||||
|
mode: 755 |
||||
|
when: init_system == "sysvinit" and ansible_os_family == "Debian" |
||||
|
notify: restart etcd |
||||
|
|
||||
|
- name: Create etcd environment vars file |
||||
|
template: |
||||
|
src: etcd.j2 |
||||
|
dest: /etc/etcd.env |
||||
|
notify: restart etcd |
||||
|
|
||||
|
- name: Ensure etcd is running |
||||
|
service: name=etcd state=started enabled=yes |
@ -0,0 +1,14 @@ |
|||||
|
--- |
||||
|
- name: Create etcd user |
||||
|
user: name=etcd shell=/bin/nologin home=/var/lib/etcd |
||||
|
|
||||
|
- name: Install etcd binaries |
||||
|
copy: |
||||
|
src={{ etcd_bin_dir }}/{{ item }} |
||||
|
dest={{ bin_dir }} |
||||
|
owner=etcd |
||||
|
mode=0755 |
||||
|
with_items: |
||||
|
- etcdctl |
||||
|
- etcd |
||||
|
notify: restart etcd |
@ -1,12 +1,3 @@ |
|||||
--- |
--- |
||||
- name: Stop etcd2 service |
|
||||
service: name=etcd state=stopped |
|
||||
ignore_errors: yes |
|
||||
|
|
||||
- name: Create etcd pod manifest |
|
||||
template: src=etcd-pod.yml dest=/etc/kubernetes/manifests/etcd-pod.manifest |
|
||||
|
|
||||
- name: Check for etcd2 port (pulling image and running container) |
|
||||
wait_for: |
|
||||
port: 2379 |
|
||||
delay: 5 |
|
||||
|
- include: install.yml |
||||
|
- include: configure.yml |
@ -0,0 +1,113 @@ |
|||||
|
#!/bin/sh |
||||
|
set -a |
||||
|
|
||||
|
### BEGIN INIT INFO |
||||
|
# Provides: etcd |
||||
|
# Required-Start: $local_fs $network $syslog |
||||
|
# Required-Stop: |
||||
|
# Default-Start: 2 3 4 5 |
||||
|
# Default-Stop: 0 1 6 |
||||
|
# Short-Description: etcd distributed k/v store |
||||
|
# Description: |
||||
|
# etcd is a distributed, consistent key-value store for shared configuration and service discovery |
||||
|
### END INIT INFO |
||||
|
|
||||
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin |
||||
|
DESC="etcd k/v store" |
||||
|
NAME=etcd |
||||
|
DAEMON={{ bin_dir }}/etcd |
||||
|
{% if inventory_hostname in groups['etcd'] %} |
||||
|
DAEMON_ARGS="" |
||||
|
{% else %} |
||||
|
DAEMON_ARGS="-proxy on" |
||||
|
{% endif %} |
||||
|
SCRIPTNAME=/etc/init.d/$NAME |
||||
|
DAEMON_USER=etcd |
||||
|
STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}" |
||||
|
PID=/var/run/etcd.pid |
||||
|
|
||||
|
# Exit if the binary is not present |
||||
|
[ -x "$DAEMON" ] || exit 0 |
||||
|
|
||||
|
# Read configuration variable file if it is present |
||||
|
[ -f /etc/etcd.env ] && . /etc/etcd.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 |
||||
|
|
||||
|
do_status() |
||||
|
{ |
||||
|
status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $? |
||||
|
} |
||||
|
|
||||
|
# Function that starts the daemon/service |
||||
|
# |
||||
|
do_start() |
||||
|
{ |
||||
|
start-stop-daemon --background --start --quiet --make-pidfile --pidfile $PID --user $DAEMON_USER --exec $DAEMON \ |
||||
|
$DAEMON_OPTS \ |
||||
|
|| return 2 |
||||
|
} |
||||
|
|
||||
|
# |
||||
|
# Function that stops the daemon/service |
||||
|
# |
||||
|
do_stop() |
||||
|
{ |
||||
|
start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME |
||||
|
RETVAL="$?" |
||||
|
|
||||
|
sleep 1 |
||||
|
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" |
||||
|
if do_stop; then |
||||
|
log_end_msg 0 |
||||
|
else |
||||
|
log_failure_msg "Can't stop etcd" |
||||
|
log_end_msg 1 |
||||
|
fi |
||||
|
;; |
||||
|
status) |
||||
|
if do_status; then |
||||
|
log_end_msg 0 |
||||
|
else |
||||
|
log_failure_msg "etcd is not running" |
||||
|
log_end_msg 1 |
||||
|
fi |
||||
|
;; |
||||
|
|
||||
|
restart|force-reload) |
||||
|
log_daemon_msg "Restarting $DESC" "$NAME" |
||||
|
if do_stop; then |
||||
|
if do_start; then |
||||
|
log_end_msg 0 |
||||
|
exit 0 |
||||
|
else |
||||
|
rc="$?" |
||||
|
fi |
||||
|
else |
||||
|
rc="$?" |
||||
|
fi |
||||
|
log_failure_msg "Can't restart etcd" |
||||
|
log_end_msg ${rc} |
||||
|
;; |
||||
|
*) |
||||
|
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 |
||||
|
exit 3 |
||||
|
;; |
||||
|
esac |
@ -1,54 +0,0 @@ |
|||||
--- |
|
||||
apiVersion: v1 |
|
||||
kind: Pod |
|
||||
metadata: |
|
||||
name: etcd |
|
||||
namespace: kube-system |
|
||||
spec: |
|
||||
hostNetwork: true |
|
||||
containers: |
|
||||
- name: etcd |
|
||||
image: quay.io/coreos/etcd:v2.2.2 |
|
||||
resources: |
|
||||
limits: |
|
||||
cpu: 100m |
|
||||
memory: 256M |
|
||||
args: |
|
||||
{% if inventory_hostname in groups['etcd'] %} |
|
||||
- --name |
|
||||
- etcd-{{inventory_hostname}}-master |
|
||||
- --advertise-client-urls |
|
||||
- "http://{{ hostvars[inventory_hostname]['ip'] | default( ansible_default_ipv4.address) }}:2379" |
|
||||
- --listen-peer-urls |
|
||||
- http://0.0.0.0:2380 |
|
||||
- --initial-advertise-peer-urls |
|
||||
- http://{{ hostvars[inventory_hostname]['ip'] | default( ansible_default_ipv4.address) }}:2380 |
|
||||
- --data-dir |
|
||||
- /var/etcd/data |
|
||||
- --initial-cluster-state |
|
||||
- new |
|
||||
{% else %} |
|
||||
- --proxy |
|
||||
- 'on' |
|
||||
{% endif %} |
|
||||
- --listen-client-urls |
|
||||
- "http://{{ hostvars[inventory_hostname]['ip'] | default( ansible_default_ipv4.address) }}:2379,http://127.0.0.1:2379" |
|
||||
- --initial-cluster |
|
||||
- "{% for host in groups['etcd'] %}etcd-{{host}}-master=http://{{ hostvars[host]['ip'] | default( hostvars[host]['ansible_default_ipv4']['address']) }}:2380{% if not loop.last %},{% endif %}{% endfor %}" |
|
||||
- --initial-cluster-token |
|
||||
- etcd-k8s-cluster |
|
||||
ports: |
|
||||
- name: etcd-client |
|
||||
containerPort: 2379 |
|
||||
hostPort: 2379 |
|
||||
- name: etcd-peer |
|
||||
containerPort: 2380 |
|
||||
hostPort: 2380 |
|
||||
volumeMounts: |
|
||||
- name: varetcd |
|
||||
mountPath: /var/etcd |
|
||||
readOnly: false |
|
||||
volumes: |
|
||||
- name: varetcd |
|
||||
hostPath: |
|
||||
path: /containers/pods/etcd-{{inventory_hostname}}/rootfs/var/etcd |
|
@ -0,0 +1,17 @@ |
|||||
|
ETCD_DATA_DIR="/var/lib/etcd" |
||||
|
{% if inventory_hostname in groups['etcd'] %} |
||||
|
{% set etcd = {} %} |
||||
|
{% for host in groups['etcd'] %} |
||||
|
{% if inventory_hostname == host %} |
||||
|
{% set _dummy = etcd.update({'name':"etcd"+loop.index|string}) %} |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
ETCD_ADVERTISE_CLIENT_URLS="http://{{ hostvars[inventory_hostname]['ip'] | default( ansible_default_ipv4.address) }}:2379" |
||||
|
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://{{ hostvars[inventory_hostname]['ip'] | default( ansible_default_ipv4.address) }}:2380" |
||||
|
ETCD_INITIAL_CLUSTER_STATE="new" |
||||
|
ETCD_INITIAL_CLUSTER_TOKEN="k8s_etcd" |
||||
|
ETCD_LISTEN_PEER_URLS="http://{{ hostvars[inventory_hostname]['ip'] | default( ansible_default_ipv4.address) }}:2380" |
||||
|
ETCD_NAME="{{ etcd.name }}" |
||||
|
{% endif %} |
||||
|
ETCD_INITIAL_CLUSTER="{% for host in groups['etcd'] %}etcd{{ loop.index|string }}=http://{{ hostvars[host]['ip'] | default(hostvars[host]['ansible_default_ipv4']['address']) }}:2380{% if not loop.last %},{% endif %}{% endfor %}" |
||||
|
ETCD_LISTEN_CLIENT_URLS="http://{{ hostvars[inventory_hostname]['ip'] | default( ansible_default_ipv4.address) }}:2379,http://127.0.0.1:2379" |
@ -0,0 +1,18 @@ |
|||||
|
[Unit] |
||||
|
Description=etcd |
||||
|
Conflicts=etcd.service |
||||
|
|
||||
|
[Service] |
||||
|
User=etcd |
||||
|
EnvironmentFile=/etc/etcd.env |
||||
|
{% if inventory_hostname in groups['etcd'] %} |
||||
|
ExecStart={{ bin_dir }}/etcd |
||||
|
{% else %} |
||||
|
ExecStart={{ bin_dir }}/etcd -proxy on |
||||
|
{% endif %} |
||||
|
Restart=always |
||||
|
RestartSec=10s |
||||
|
LimitNOFILE=40000 |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=multi-user.target |
Write
Preview
Loading…
Cancel
Save