рдореБрдЭреЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВред рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ



рд╢реБрдн рджрд┐рдиред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдПрдХ рдФрд░ рдиреЛрдЯред рдЗрд╕ рдмрд╛рд░ рдпрд╣ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рддрд╣реА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБ рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдЙрддрд╛рд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╕-рдкрд╛рд╕ рдХреЗ рд▓реЛрдЧ рдирд╣реАрдВ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдореМрдЬреВрджрд╛ рд╕реНрддрд░, рдЗрдВрдЯрд░рдиреЗрдЯ рдФрд░ рддреИрдпрд╛рд░ рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд░рд╛рдд рдХреЗ рджреМрд░рд╛рди рдЙрдард╛рдП рдЧрдП рдЗрд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдПрдХ рд╡рд░реНрд╖ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдХреАрд╡рд░реНрдб - AWS + рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо + kops ред рдЕрдЧрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

-1ред рд╣рдо рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ


рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реНрдерд┐рддрд┐ - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдРрд╕реЗ рдЪрд░рдг рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдХрд╣реАрдВ рдкрд░ рдЙрддрд╛рд░рдирд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╕рд░рд▓ HTML рдкреГрд╖реНрда рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдореИрдВ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ, рд╕реНрдерд╛рдиреАрдп, рдкрд░реАрдХреНрд╖рдг, рдЙрддреНрдкрд╛рдж рдЦрдбрд╝рд╛ рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рддреИрдирд╛рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдпрд╣ рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рд░рд╡реЗрд▓ рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ, рдЖрдк рдЧреЛ, рдкрд╛рдЗрдерди-рдПрдкреНрд▓рд┐рдХреЗрд╢рди, WP рдкрд░ рдЫреЛрдЯреА рд╕рд╛рдЗрдЯ, html-рдкреЗрдЬ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдкрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкреНрд░рдХреАрд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рддрдХ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдлрд┐рд░ рдЯреАрдо рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╡реНрдпрдХреНрддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╕реБрдзрд╛рд░ рдФрд░ рдкреВрд░рдХ рдХрд░реЗрдЧрд╛ред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдпрд╛ рдХрд┐ рдореИрдВ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрдиреЛрдВ рдкрд░ GoLand, PhpStorm, Docker, Git рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╣реВрдВред рд╣рд╛рдВ, рдФрд░ рдЖрдк рдереЛрдХ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдПрдХ рдорд╢реАрди рд╕реЗ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдУрдПрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдЖрдк рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдПрдХ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВред

0. рдХрд╛рдо рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдирд╛ред


рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА AWS рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЦрд╛рддрд╛ рд╕реАрдорд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдПрдХ IAM рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдпрд╛ рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪ рдХреБрдВрдЬреА + рдЧреБрдкреНрдд рдХреБрдВрдЬреА рд╣реИ ред рдЬреЛрди - us-east-1 ред

рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП? AWS CLI , AWS рдХреЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЯреЗрд░рд╛рдлреЙрд░реНрдо , рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рд╣реЗрд▓реНрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП kopsectl , kops ред рд╣рдо рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЧреАрдереВрдм рдХреА рд╡рд┐рд╢рд╛рд▓рддрд╛ рдореЗрдВ рдорд┐рд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдВ)ред рд╣рдо рдЕрдкрдиреЗ docker-compose.yml рдХреЛ рдЖрд░реЛрд╣рд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреЗ рд╣реИрдВ ред

Dockerfile
FROM ubuntu:16.04 ARG AWSCLI_VERSION=1.12.1 ARG HELM_VERSION=2.8.2 ARG ISTIO_VERSION=0.6.0 ARG KOPS_VERSION=1.9.0 ARG KUBECTL_VERSION=1.10.1 ARG TERRAFORM_VERSION=0.11.0 # Install generally useful things RUN apt-get update \ && apt-get -y --force-yes install --no-install-recommends \ curl \ dnsutils \ git \ jq \ net-tools \ ssh \ telnet \ unzip \ vim \ wget \ && apt-get clean \ && apt-get autoclean \ && apt-get autoremove \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Install AWS CLI RUN apt-get update \ && apt-get -y --force-yes install \ python-pip \ && pip install awscli==${AWSCLI_VERSION} \ && apt-get clean \ && apt-get autoclean \ && apt-get autoremove \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Install Terraform RUN wget -O terraform.zip https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip \ && unzip terraform.zip \ && mv terraform /usr/local/bin/terraform \ && chmod +x /usr/local/bin/terraform \ && rm terraform.zip # Install kubectl ADD https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl /usr/local/bin/kubectl RUN chmod +x /usr/local/bin/kubectl # Install Kops ADD https://github.com/kubernetes/kops/releases/download/${KOPS_VERSION}/kops-linux-amd64 /usr/local/bin/kops RUN chmod +x /usr/local/bin/kops # Install Helm RUN wget -O helm.tar.gz https://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-linux-amd64.tar.gz \ && tar xfz helm.tar.gz \ && mv linux-amd64/helm /usr/local/bin/helm \ && chmod +x /usr/local/bin/helm \ && rm -Rf linux-amd64 \ && rm helm.tar.gz # Create default user "kops" RUN useradd -ms /bin/bash kops WORKDIR /home/kops USER kops # Ensure the prompt doesn't break if we don't mount the ~/.kube directory RUN mkdir /home/kops/.kube \ && touch /home/kops/.kube/config 

рдбреЛрдХрд░-compose.yml
 version: '2.1' services: cluster-main: container_name: cluster.com image: cluster.com user: root stdin_open: true volumes: - ./data:/data - ./.ssh:/root/.ssh - ./.kube:/root/.kube - ./.aws:/root/.aws cluster-proxy: container_name: cluster.com-kubectl-proxy image: cluster.com user: root entrypoint: kubectl proxy --address='0.0.0.0' --port=8001 --accept-hosts='.*' ports: - "8001:8001" stdin_open: true volumes: - ./data:/data - ./.ssh:/root/.ssh - ./.kube:/root/.kube - ./.aws:/root/.aws 

makefile
 docker.build: docker build -t cluster.com . docker.run: docker-compose up -d docker.bash: docker exec -it cluster.com bash 


Dockerfile - рдореВрд▓ ubuntu рдЫрд╡рд┐ рд▓реЗрдВ рдФрд░ рд╕рднреА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдореЗрдХрдлрд╛рдЗрд▓ - рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрд▓рд┐рдпрд╛рд╕реЗрд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Docker-compose.yml - рд╣рдордиреЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрдЯреЗрдирд░ рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ K8S рдбреИрд╢рдмреЛрд░реНрдб рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рд░реВрдЯ рдореЗрдВ рдбреЗрдЯрд╛ , .sh , .kube , .aws рдлреЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ aws, ssh рдХреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо docker.build рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдПрдХрддреНрд░ рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ docker.run рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдареАрдХ рд╣реИ, рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо yaml k8s рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ , рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рдЗрд╕ рдЪрд░рдг рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рдгрд╛рдо рдЬреАрдердм рдкрд░ рд░рдЦрд╛ ред

1. рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдЙрдард╛рдПрдБред


рдЕрдЧрд▓рд╛ рдЗрд╕ рдиреЛрдЯ рдХрд╛ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рд╣реЛрдЧрд╛ред рдореИрдВ рдХрдИ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд┐рдЪреЛрдбрд╝ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рд╕рднреА рд╕рдорд╛рди, рдореЗрд░реЗ рдиреЛрдЯ рдХрд╛ рдкреНрд░рд╛рд░реВрдк tldr рд╣реИред

рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ / aws-рдХреНрд▓рд╕реНрдЯрд░-init-kops-terraform рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рд╣рдо рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреНрдпрд╛ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ docker.bash рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдВрдЯреЗрдирд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ ред рдмреЛрд░рд┐рдВрдЧ рдЯреАрдореЛрдВ рдХрд╛ рдмрд┐рдЦрд░рд╛рд╡ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

AWS рд╕реАрдПрд▓рдЖрдИ


рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ kops рдмрдирд╛рддреЗ рд╣реИрдВ , рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ AWS CLI рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕реБрдкрд░рдпреБрд╕рд░ рд╕реЗ рдХрдорд╛рдВрдб рди рдЪрд▓рд╛рдПрдВред

 aws iam create-group --group-name kops #   aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AWSCertificateManagerFullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-name kops aws iam create-user --user-name kops aws iam add-user-to-group --user-name kops --group-name kops aws iam create-access-key --user-name kops 

 aws configure 

рдЖрд░рдВрднрд┐рдХ рдЯреЗрд░рд╛рдлреЙрд░реНрдо


рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ / aws-рдХреНрд▓рд╕реНрдЯрд░-init-kops-terraform / variables.tf рдореЗрдВ, рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдирд╛рдо рд╡рд╛рдВрдЫрд┐рдд рдореЗрдВ рдмрджрд▓ рджреЗрдВ ред рд╣рдорд╛рд░реЗ dns рд╕рд░реНрд╡рд░ рдХреЛ update.json рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЗрдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдбреЛрдореЗрди рдЦрд░реАрджрд╛ рдерд╛ред

 #    cd /data/aws-cluster-init-kops-terraform #    AWS CLI export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id) export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key) #  terraform terraform init terraform get terraform apply #  NS  cat update-zone.json \ | jq ".Changes[].ResourceRecordSet.Name=\"$(terraform output name).\"" \ | jq ".Changes[].ResourceRecordSet.ResourceRecords=$(terraform output -json name_servers | jq '.value|[{"Value": .[]}]')" \ > update-zone.json 

рдХреЛрдкреНрд╕


рд╣рдо kops рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ , рдПрдХ .tf рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

 export NAME=$(terraform output cluster_name) export KOPS_STATE_STORE=$(terraform output state_store) export ZONES=$(terraform output -json availability_zones | jq -r '.value|join(",")') kops create cluster \ --master-zones $ZONES \ --zones $ZONES \ --topology private \ --dns-zone $(terraform output public_zone_id) \ --networking calico \ --vpc $(terraform output vpc_id) \ --target=terraform \ --out=. \ ${NAME} 

рдпрд╣рд╛рдВ рдереЛрдбрд╝реА рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд░реВрд░рдд рд╣реИред Terraform рдПрдХ VPC рдмрдирд╛рдПрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдЙрд╕ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдЯреНрд╡реАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ kops рд╣рдореЗрдВ рджреЗрдЧрд╛ ред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рд░реЗрди / рдЧреЗрдВрд╕реБрдмрдиреЗрдЯреНрд╕ рд╣реЗрд▓реНрдкрд░ рдЗрдореЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ : 0.1
 #   terraform output -json > subnets.json 

 #     echo subnets.json | docker run --rm -i ryane/gensubnets:0.1 

рдЖрдк рдорд╛рд░реНрдЧ53 рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдиреАрддрд┐рдпрд╛рдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

 additionalPolicies: master: | [ { "Effect": "Allow", "Action": ["route53:ListHostedZonesByName"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["elasticloadbalancing:DescribeLoadBalancers"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["route53:ChangeResourceRecordSets"], "Resource": ["*"] } ] node: | [ { "Effect": "Allow", "Action": ["route53:ListHostedZonesByName"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["elasticloadbalancing:DescribeLoadBalancers"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["route53:ChangeResourceRecordSets"], "Resource": ["*"] } ] 

рдХреЛрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдкрд╛рджрди рдХреНрд▓рд╕реНрдЯрд░ $ {NAME} рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ ред



рдЕрдм рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд╣реА рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

 kops update cluster \ --out=. \ --target=terraform \ ${NAME} terraform apply 

рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреБрдмреЗрдЯрд▓ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдлрд╝реЛрд▓реНрдбрд░ рдбреЗрдЯрд╛ / aws-рдХреНрд▓рд╕реНрдЯрд░-init-kops-terraform рдореЗрдВ , рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд┐рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдЖрдк рдмрд╕ рд╕рдм рдХреБрдЫ рдЧрд┐рдЯ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд┐рдЬреА рдмрд┐рдЯрдкреИрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

 $ kubectl get nodes NAME STATUS AGE ip-10-20-101-252.ec2.internal Ready,master 7m ip-10-20-103-232.ec2.internal Ready,master 7m ip-10-20-103-75.ec2.internal Ready 5m ip-10-20-104-127.ec2.internal Ready,master 6m ip-10-20-104-6.ec2.internal Ready 5m 

2. рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдмрдврд╝рд╛рдПрдВ


рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╣реИ, рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рд╣реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рдХреЙрдиреНрдлрд┐рдЧ рд▓рдЧрд╛рдКрдВрдЧрд╛ред рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ / k8s рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реЗрд╡рд╛ рдЪреБрдЯрдХреБрд▓реЗ


рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рдорд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ hub.docker.com рдкрд░ helm , path53 , рд╕реНрдЯреЛрд░реЗрдЬ-рдХреНрд▓рд╛рд╕ рдФрд░ рдЕрдкрдиреА рдирд┐рдЬреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдЦреИрд░, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдРрд╕реА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рд╣реИред

 # Init helm kubectl create serviceaccount --namespace kube-system tiller kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' helm init 

 kubectl apply -f default-namespace.yaml kubectl apply -f storage-classes.yaml kubectl apply -f route53.yaml kubectl apply -f docker-hub-secret.yml kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 

PostgreSQL + рд░реЗрдбрд┐рд╕


рдореИрдВрдиреЗ рдХрдИ рдмрд╛рд░ рд╕реНрдЯреИрдХреНрдб рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбреЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд▓рд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдм рддрдХ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╕рд╛рдмрд┐рдд рд╣реБрдЖ рд╣реИред рдореИрдВ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ред рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдЙрдбрд╝рд╛рди рд╕рд╛рдорд╛рдиреНрдп рд╣реИред

рд╣рдо рд╣реЗрд▓рдо-рдЪрд╛рд░реНрдЯ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реЗрдбрд┐рд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВред

 #  etcd  stolon cd etcd-chart helm install --name global-etcd . #   stolon cd stolon-chart helm dep build helm install --name global-postgres . #  redis kubectl apply -f redis 

рдирдЧрдиреЗрдХреНрд╕ + php


рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдЪреНрдЫрд╛ред Nginx рдФрд░ php-fpm ред рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд╛рдл рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрд╡реЗрджрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрд╕ рдЫрд╡рд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдХреЛрдб рд▓реЗ рд▓реЗрдВрдЧреЗ + AWS рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдмрдВрдзрдХ рд╕реЗ рдПрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВрдЧреЗред Php рд╣реА - рдЖрдк рдЗрд╕реЗ рдбреЙрдХрд╣реИрдм рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЕрдкрдирд╛ рдирд┐рдЬреА рдмрдирд╛рдпрд╛ред

 kubectl apply -f nginx kubectl apply -f php 

рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ / crm-code рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдЖрдкрдХреА рдЫрд╡рд┐ рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╛рдлреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдлрд╛рдЗрд▓ nginx / dep рддреИрдирд╛рддреА .yml рд╣реИ ред



рдбреЛрдореЗрди рдмрд╛рд╣рд░ рд▓рд╛рдУред рд░реВрдЯ 53 рд╕реЗрд╡рд╛ рдЗрд╕реЗ рдЙрдард╛рдПрдЧреА , рдбреАрдПрдирдПрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдмрджрд▓реЗрдЧреА / рдЬреЛрдбрд╝реЗрдЧреА, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдмрдВрдзрдХ рд╕реЗ рдИрдПрд▓рдмреА рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд╝рд╛рдЗрд▓ nginx / service.yml рд╣реИ ред



рдЖрдЧреЗ env рдЪрд░ php рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдВрджрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ PostgreSQL / Redis рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдлрд╛рдЗрд▓ php / dep рддреИрдирд╛рддреА . yml рд╣реИ ред



рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ K8S рдХреНрд▓рд╕реНрдЯрд░ рд╣реИ, рдЬреЛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░ рд╣рдо рдирдИ рд╕реЗрд╡рд╛рдУрдВ, рдирдП рд╕рд░реНрд╡рд░реЛрдВ (рдиреЛрдбреНрд╕) рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, PostgreSQL, PHP, Nginx рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрд▓рдЧ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рдордиреЗ рд░рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЯреАрдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдХрд░реЗрдЧрд╛ ред

рдЗрд╕ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдиреЛрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕ рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмреИрдХрдЕрдк / рдирд┐рдЧрд░рд╛рдиреА рдореБрджреНрджреЛрдВ рдкрд░ рдирд╣реАрдВ рдЫреВрдКрдБрдЧрд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ, рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ : K8S рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗрд╡рд╛ рд╕реЗ 8001 / ui ред рдмрд╛рдж рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ , рдЧреНрд░реЗрдлрд╛рдирд╛ , рдмрд░реНрдорди , рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╛рди рд╕рдорд╛рдзрд╛рди рдХреЛ рдЬрдХрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдЯрд░реНрдорд┐рдирд▓ рдпрд╛ рдЯреАрдорд╕рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЬреЗрдирдХрд┐рдВрд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВрдЧреЗред

 #     -      Teamcity docker build -t GROUP/crm-code:latest . docker push GROUP/crm-code:latest #   (  ) kubectl set image deployment/php-fpm php-fpm=GROUP/php-fpm kubectl rollout status deployment/php-fpm kubectl set image deployment/php-fpm php-fpm=GROUP/php-fpm:latest kubectl set image deployment/nginx nginx=danday74/nginx-lua kubectl rollout status deployment/nginx kubectl set image deployment/nginx nginx=danday74/nginx-lua:latest kubectl rollout status deployment/php-fpm kubectl rollout status deployment/nginx 

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдФрд░ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рдиреЗ рдкрд░ рджреЛрдЧреБрдирд╛ рдЦреБрд╢реА рд╣реЛрдЧреАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рднрдВрдбрд╛рд░ рдПрдХ рдФрд░ рджреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/hi423481/


All Articles