# docker command should be executed on the manager node
# docker command for deploy cadvisor container on each nodes
docker service create --name cadvisor --mode=global --publish target=8080,mode=host --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock,ro --mount type=bind,src=/,dst=/rootfs,ro --mount type=bind,src=/var/run,dst=/var/run --mount type=bind,src=/sys,dst=/sys,ro --mount type=bind,src=/var/lib/docker,dst=/var/lib/docker,ro google/cadvisor -docker_only
Node_exporter
node exporter port number: 9100
# docker command for deploy node_exporter on each node
docker service create --name node_exporter --mode=global --publish 9100:9100 --mount type=bind,src=/,dst=/host,ro,bind-propagation=rslave quay.io/prometheus/node-exporter --path.rootfs=/host
Check each services are correctly running on each node
# docker service ls |egrep 'node_exporter|cadvisor'
[CONTAINERID] cadvisor global 2/2 google/cadvisor:latest *:8080->8080/tcp
[CONTAINERID] node_exporter global 2/2 quay.io/prometheus/node-exporter:latest *:9100->9100/tcp
Also can check with metric URLs on the web browser
- http://192.168.0.2:8080/metrics
- http://192.168.0.3:9100/metrics
Check on prometheus
from the gui, Status > Targets can see the scraping jobs you configured before
쿠버네티스 v1.13 버전대에서 HA 구성 (마스터 노드 2개) HA in Kubernetes v1.13
VM 설정 및 클러스터 설정 VM settings and Configure HA cluster
Ubuntu 18.04에서 쿠버네티스 v1.13.4와 vagrant VM을 사용하여 클러스터 구축 방법을 설명합니다.
This article explains that creating kubernets cluster (v1.13.4) on Ubuntu 18.04 vagrant VM.
$ vagrant status
Current machine states:
k8s-1 poweroff (virtualbox)
k8s-2 poweroff (virtualbox)
k8s-3 poweroff (virtualbox)
k8s-4 poweroff (virtualbox)
k8s-1, k8s-2 노드 2개를 마스터 노드로, 나머지 2개를 워커 노드로 사용하는 환경입니다.
Vagrant 파일에 사용할 VM 스펙을 설정해 줍니다. network 설정 시 private을 사용해도 무방하지만 리눅스 라우팅 순서로 인해 클러스터링이 잘 묶이지 않는 이슈가 있습니다. 따라서 public으로 진행하는 것을 추천합니다.
Vagrant 파일에 쿠버네티스 클러스터에 필요한 구성요소 설치 과정이 포함되어 있습니다.
There are two master nodes (k8s-1 and k8s-2) and two worker nodes.
Specify VMs in Vagrant file. In this case, we are going to use public network configuration for VMs. If you set up private, it's okay but the clustering would not going well. Installation process of componets like docker, kubeadm is included.
$ cat Vagrantfile
# -*- mode: ruby -*-# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box_check_update = false
config.vm.box = "ubuntu/bionic64"
node_subnet = "10.254.1"
# config.vm.network "private_network", type: "dhcp"
(1..4).each do |i|
config.vm.define "k8s-#{i}" do |node|
node.vm.box = "ubuntu/bionic64"
node.vm.hostname = "k8s-#{i}"
# node.vm.network "private_network", ip: "#{node_subnet}.#{i+1}", virtualbox__intnet: true, gateway: "10.254.1.1"
node.vm.network "public_network", bridge: "[Network_Interface_name]", gateway: "192.168.1.1"
node.vm.provider "virtualbox" do |vb|
vb.name = "k8s-#{i}"
vb.gui = false
vb.cpus = 2
vb.memory = "4096"
node.vm.provision "bootstrap", type: "shell", inline: <<-SHELL
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get update
kube_version="1.13.4-00"
kube_cni_version="0.6.0-00"
docker_version="18.06.1~ce~3-0~ubuntu"
packages="${packages}
docker-ce=${docker_version}
kubernetes-cni=${kube_cni_version}
kubelet=${kube_version}
kubeadm=${kube_version}
kubectl=${kube_version}"
sudo apt-get -y --allow-unauthenticated install ${packages}
sudo usermod -aG docker vagrant
sudo systemctl enable docker.service
sudo apt-get -y install keepalived
sudo systemctl enable keepalived.service
sudo echo "#{node_subnet}.#{i + 1} k8s-#{i}" | sudo tee -a /etc/hosts
sudo swapoff -a
SHELL
end
end
end
end
구성을 마친 뒤 VM을 실행 시킨 뒤 k8s-1 노드에 SSH로 접속한 후 keepalived를 설정 해 줍니다.
쿠버네티스 클러스터 대표 IP는 192.168.123.234 입니다. k8s-1 노드의 해당 네트워크 대역 IP를 가지고 있는 인터페이스 이름을 지정해 줍니다.
After provisioning the VMs, connect to k8s-1 first. Set up the keepalived for creating master IP of our kubernetes cluster.
그리고 가장 중요한 인증서 복사를 진행합니다. k8s-1 노드에서 클러스터를 생성하면서 같이 만들어진 인증서 들을 k8s-2 노드에 복사해 줍니다. 일일히 복사도 가능하지만 해당 디렉토리의 인증서를 모두 복사한 뒤 필요한 파일을 제외한 나머지 인증서를 삭제해 주었습니다.
Curator is tool for managing ES indices. 큐레이터는 엘라스틱서치 인덱스 관리 툴이다.
Installation and configuration
You need to check your Elasticsearch version compatible with curator version.
운영중인 엘라스틱 서치 버전과 큐레이터 버전을 맞춰 주어야 한다.
설치는 pip를 이용하며, 설정 파일은 yml 형식으로 작성한다.
# in the ES master node, ES version 6+
$ pip install -U elasticsearch-curator==5.8.1
# create curator config file
# logging is optional
$ vi ~/.curator/curator.yml
---
client:
hosts:
- [ES_IP]
port: [ES_PORT]
logging:
loglevel: INFO
logfile: /[PATH_TO_LOGFILE]/curator.log
logformat: default
# create curator action yaml file
$ vi delete-old-indices.yml
---
actions:
1:
action: delete_indices
description: >-
Delete indices older than 1 months (based on index name), for logstash-
prefixed indices. Ignore the error if the filter does not result in an
actionable list of indices (ignore_empty_list) and exit cleanly.
options:
ignore_empty_list: True
disable_action: False
filters:
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: months
unit_count: 1
CLI execution
# execute curator command (--dry-run: verbose and execute action without changes)
curator --dry-run delete-old-indices.yml
AWX에서 Job 실행 후, Inventory sync 과정에서 계속 fail status를 뱉었다. 에러 메시지는 다음과 같다.
Inventory sync keep failing when the job is launched on AWX. The error message is
ERROR! Attempting to decrypt but no vault secrets found
해당 에러는 AWX 프로젝트 내에서 사용하는 ansible SCM 내에 vault 파일을 포함하고 있을 경우 발생한다. Job template 생성 시 AWX상에서 Vault 타입의 Credential을 생성하고 추가 해 주면 해결이 되어야 하는데, 정상적으로 적용하지 못하는 것으로 보인다.
SCM 내에 vault 파일을 모두 삭제해 버리는 것도 방법이다. SCM이 잘 보호 되고 있다는 가정 하에, vault password 파일과 ansible.cfg 파일을 설정하면 해결 가능하다.
That error messages comes with if the SCM in AWX project that have some vault files with no vault passwords are given. In the Job template settings, we can set the credential of vault type. But now, it is not working correctly when the job is launched. The temporary way to fix it is set up the vault password file and ansible configuration file in your SCM.
# ansible.cfg
# If set, configures the path to the Vault password file as an alternative to
# specifying --vault-password-file on the command line.
vault_password_file = ./.vault.txt