Skip to content

Commit 352d702

Browse files
committed
Add many examples - helm, k8s module, kubectl connection plugin.
1 parent 28c1cad commit 352d702

File tree

11 files changed

+266
-4
lines changed

11 files changed

+266
-4
lines changed

kubernetes/Vagrantfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
99
config.vm.provider "virtualbox"
1010

1111
config.vm.provider :virtualbox do |v|
12-
v.memory = 1024
12+
v.memory = 1536
1313
v.cpus = 1
1414
v.linked_clone = true
1515
end

kubernetes/examples/files/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
kubectl-config

kubernetes/examples/files/nginx.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: a4d-nginx
6+
namespace: default
7+
labels:
8+
app: nginx
9+
spec:
10+
replicas: 3
11+
selector:
12+
matchLabels:
13+
app: nginx
14+
template:
15+
metadata:
16+
labels:
17+
app: nginx
18+
spec:
19+
containers:
20+
- name: nginx
21+
image: nginx:1.7.9
22+
ports:
23+
- containerPort: 80
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
apiVersion: rbac.authorization.k8s.io/v1beta1
3+
kind: ClusterRoleBinding
4+
metadata:
5+
name: tiller
6+
roleRef:
7+
apiGroup: rbac.authorization.k8s.io
8+
kind: ClusterRole
9+
name: cluster-admin
10+
subjects:
11+
- kind: ServiceAccount
12+
name: tiller
13+
namespace: kube-system

kubernetes/examples/helm-cleanup.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
- hosts: k8s-master
3+
become: yes
4+
5+
tasks:
6+
- name: Get Tiller's ClusterIP.
7+
k8s:
8+
api_version: v1
9+
kind: Service
10+
name: tiller-deploy
11+
namespace: kube-system
12+
register: tiller_service
13+
14+
- name: Set the Helm host and port.
15+
set_fact:
16+
helm_host: "{{ tiller_service.result.spec.clusterIP }}"
17+
helm_port: "{{ tiller_service.result.spec.ports[0].port }}"
18+
19+
- name: Delete phpmyadmin using helm.
20+
command: helm delete --purge phpmyadmin
21+
environment:
22+
HELM_HOST: '{{ helm_host }}:{{ helm_port }}'
23+
24+
- name: Reset Helm.
25+
command: helm reset --force
26+
environment:
27+
HELM_HOST: '{{ helm_host }}:{{ helm_port }}'
28+
29+
- name: Remove Tiller RBAC definition.
30+
k8s:
31+
state: absent
32+
definition: "{{ lookup('file', 'files/tiller-rbac.yml') | from_yaml }}"
33+
34+
- name: Remove Tiller namespace.
35+
k8s:
36+
state: present
37+
api_version: v1
38+
kind: ServiceAccount
39+
name: tiller
40+
namespace: kube-system
41+
42+
- name: Delete helm binary.
43+
file:
44+
path: /usr/local/bin/helm
45+
state: absent

kubernetes/examples/helm.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
- hosts: k8s-master
3+
become: yes
4+
5+
tasks:
6+
- name: Create Tiller namespace.
7+
k8s:
8+
state: present
9+
definition:
10+
apiVersion: v1
11+
kind: ServiceAccount
12+
metadata:
13+
name: tiller
14+
namespace: kube-system
15+
16+
- name: Apply Tiller RBAC definition.
17+
k8s:
18+
state: present
19+
definition: "{{ lookup('file', 'files/tiller-rbac.yml') | from_yaml }}"
20+
21+
- name: Retrieve helm binary archive.
22+
unarchive:
23+
src: https://storage.googleapis.com/kubernetes-helm/helm-v2.10.0-linux-amd64.tar.gz
24+
dest: /tmp
25+
creates: /usr/local/bin/helm
26+
remote_src: yes
27+
28+
- name: Move helm binary into place.
29+
command: >
30+
cp /tmp/linux-amd64/helm /usr/local/bin/helm
31+
creates=/usr/local/bin/helm
32+
33+
- name: Set up Helm and Tiller.
34+
command: helm init --service-account tiller
35+
register: helm_init_result
36+
changed_when: "'already installed' not in helm_init_result.stdout"
37+
38+
- name: Get Tiller's ClusterIP.
39+
k8s:
40+
api_version: v1
41+
kind: Service
42+
name: tiller-deploy
43+
namespace: kube-system
44+
register: tiller_service
45+
46+
- name: Set the Helm host and port.
47+
set_fact:
48+
helm_host: "{{ tiller_service.result.spec.clusterIP }}"
49+
helm_port: "{{ tiller_service.result.spec.ports[0].port }}"
50+
51+
- name: Wait for Tiller to become responsive.
52+
wait_for:
53+
host: '{{ helm_host }}'
54+
port: '{{ helm_port }}'
55+
state: started
56+
57+
- name: List installed Helm charts.
58+
command: helm list
59+
environment:
60+
HELM_HOST: '{{ helm_host }}:{{ helm_port }}'
61+
register: helm_list_results
62+
changed_when: False
63+
64+
- name: Install phpMyAdmin with Helm.
65+
command: >
66+
helm install --name phpmyadmin stable/phpmyadmin
67+
--set service.type=NodePort
68+
environment:
69+
HELM_HOST: '{{ helm_host }}:{{ helm_port }}'
70+
when: "'phpmyadmin' not in helm_list_results.stdout"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
- hosts: k8s-master
3+
become: yes
4+
5+
tasks:
6+
- name: Remove resources in Nginx Deployment definition.
7+
k8s:
8+
state: absent
9+
definition: "{{ lookup('file', 'files/nginx.yml') | from_yaml }}"
10+
11+
- name: Remove the Nginx Service.
12+
k8s:
13+
state: absent
14+
api_version: v1
15+
kind: Service
16+
namespace: default
17+
name: a4d-nginx

kubernetes/examples/k8s-module.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
- hosts: k8s-master
3+
become: yes
4+
5+
pre_tasks:
6+
- name: Ensure Pip is installed.
7+
package:
8+
name: python-pip
9+
state: present
10+
11+
- name: Ensure OpenShift client is installed.
12+
pip:
13+
name: openshift
14+
state: present
15+
16+
tasks:
17+
- name: Apply Nginx definition from Ansible controller file system.
18+
k8s:
19+
state: present
20+
definition: "{{ lookup('file', 'files/nginx.yml') | from_yaml }}"
21+
22+
- name: Expose the Nginx service with an inline Service definition.
23+
k8s:
24+
state: present
25+
definition:
26+
apiVersion: v1
27+
kind: Service
28+
metadata:
29+
labels:
30+
app: nginx
31+
name: a4d-nginx
32+
namespace: default
33+
spec:
34+
type: NodePort
35+
ports:
36+
- port: 80
37+
protocol: TCP
38+
targetPort: 80
39+
selector:
40+
app: nginx
41+
42+
- name: Get the details of the a4d-nginx Service.
43+
k8s:
44+
api_version: v1
45+
kind: Service
46+
name: a4d-nginx
47+
namespace: default
48+
register: a4d_nginx_service
49+
50+
- name: Print the NodePort of the a4d-nginx Service.
51+
debug:
52+
var: a4d_nginx_service.result.spec.ports[0].nodePort
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
# This playbook assumes you already have the kubectl binary installed
3+
# and available in the $PATH.
4+
- hosts: k8s-master
5+
become: yes
6+
7+
tasks:
8+
- name: Retrieve kubectl config file from the master server.
9+
fetch:
10+
src: /root/.kube/config
11+
dest: files/kubectl-config
12+
flat: yes
13+
14+
- name: Get the phpmyadmin Pod name.
15+
command: >
16+
kubectl --no-headers=true get pod -l app=phpmyadmin
17+
-o custom-columns=:metadata.name
18+
register: phpmyadmin_pod
19+
20+
- name: Add the phpmyadmin Pod to the inventory.
21+
add_host:
22+
name: '{{ phpmyadmin_pod.stdout }}'
23+
kubectl_pod: '{{ phpmyadmin_pod.stdout }}'
24+
kubectl_namespace: default
25+
ansible_kubectl_config: files/kubectl-config
26+
ansible_connection: kubectl
27+
28+
# Note: Python must be present in the container to use other modules.
29+
- name: Run a command inside the container.
30+
raw: date
31+
register: date_output
32+
delegate_to: '{{ phpmyadmin_pod.stdout }}'
33+
34+
- debug: var=date_output.stdout

kubernetes/inventory

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
[k8s]
1+
[k8s-master]
22
master ansible_host=192.168.84.2 kubernetes_role=master
3+
4+
[k8s-nodes]
35
node1 ansible_host=192.168.84.3 kubernetes_role=node
46
node2 ansible_host=192.168.84.4 kubernetes_role=node
57

8+
[k8s:children]
9+
k8s-master
10+
k8s-nodes
11+
612
[k8s:vars]
713
ansible_ssh_user=vagrant
8-
ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
14+
ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key

0 commit comments

Comments
 (0)