赞
踩
AWS Elastic Container Service(AWS Fargate或具有水平和垂直自动伸缩的预留实例);
Azure或Google Cloud中具有预定义Docker镜像的云实例(包含模板,实例组和自动缩放);
在你自己的服务器上;
当然还有Kubernetes!Kubernetes是2014年由Google工程师专门为虚拟化和容器创建的。
API Server:所有REST命令的入口点,是用户可以访问的主节点的唯一组件。
Datastore:Kubernetes群集使用的强大,一致且高可用的键值存储。
Scheduler:监视新创建的Pod并将它们分配给节点。Pod和Services部署到节点上主要由Scheduler来控制。
Controller manager:管理着处理集群中日常任务的所有控制器。
Worker Node:主要的节点代理,也称为minion(旧版本Kubernetes的叫法)。Pod在这里运行。工作节点包含所有必要的服务,这些服务包括管理容器之间的网络,与主节点通信以及将资源分配给已调度容器等。
Docker:运行在每个工作节点上,用来下载镜像和启动容器。
Kubelet:监视Pod的状态并确保容器已启动并运行。它还与数据存储通信,获取有关服务的信息并记录新创建的服务的详细信息。
Kube-proxy:单个工作节点上的服务的网络代理和负载均衡。它负责流量路由。
Kubectl:一个CLI工具,供用户与Kubernetes API Server进行通信。
rails new blog
production:
adapter: mysql2
encoding: utf8
pool: 5
port: 3306
database: <%= ENV['DATABASE_NAME'] %>
host: 127.0.0.1
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
rails g scaffold Article title:string description:text
gem 'mysql2', '< 0.6.0', '>= 0.4.4'
gem 'health_check'
docker build -t REPO_NAME/IMAGE_NAME:TAG . && docker push REPO_NAME/IMAGE_NAME:TAG
kubectl create secret generic mysql-instance-credentials \
--from-file=credentials.json=service-account.json
kubectl create secret generic simple-app-secrets \
--from-literal=username=$MYSQL_PASSWORD \
--from-literal=password=$MYSQL_PASSWORD \
--from-literal=database-name=$MYSQL_DB_NAME \
--from-literal=secretkey=$SECRET_RAILS_KEY
kubectl apply -f rake-tasks-job.yaml
kubectl apply -f deployment.yaml
NAME READY STATUS RESTARTS AGE
sample-799bf9fd9c-86cqf 2/2 Running 0 1m
sample-799bf9fd9c-887vv 2/2 Running 0 1m
sample-799bf9fd9c-pkscp 2/2 Running 0 1m
创建一个静态IP: gcloud compute addresses create sample-ip--global
创建Ingress: kubectl apply-f ingress.yaml
检查Ingress是否创建成功和查看它的IP地址: kubectlgetingress-w
为你的应用创建域名或者子域名
主分支用于开发,用于新代码。当有人将新代码推送到主分支时,CircleCI启动主分支构建和测试代码的工作流。
生产分支用于将新版本部署到生产环境。生产分支的工作流程如下:推送新代码(如果从主分支到生产开放PR则更好)以触发新的构建和部署过程;在构建过程中,CircleCI创建新的Docker镜像,将其推送到GCR并创建新的部署;如果失败,CircleCI将触发回滚过程。
kubectl patch deployment sample -p '{"spec":{"template":{"spec":{"containers":[{"name":"sample","image":"gcr.io/test-d6bf8/simple:'"$CIRCLE_SHA1"'"} ] } } } }'
if ! kubectl rollout status deploy/sample; then
echo "DEPLOY FAILED, ROLLING BACK TO PREVIOUS"
kubectl rollout undo deploy/sample
# Deploy failed -> notify slack
else
echo "Deploy succeeded, current version: ${CIRCLE_SHA1}"
# Deploy succeeded -> notify slack
fi
deployment.extensions/sample patched
Waiting for deployment "sample" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "sample" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "sample" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "sample" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "sample" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "sample" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "sample" rollout to finish: 2 of 3 updated replicas are available...
Waiting for deployment "sample" rollout to finish: 2 of 3 updated replicas are available...
deployment "sample" successfully rolled out
Deploy succeeded, current version: 512eabb11c463c5431a1af4ed0b9ebd23597edd9
https://kubernetes.io/docs/setup/
https://github.com/d-kononov/simple-rails-app-in-k8s
https://github.com/d-kononov/simple-rails-app-in-k8s/blob/master/Dockerfile
https://cloud.google.com/kubernetes-engine/docs/quickstart
https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine#2createaserviceaccount
https://github.com/d-kononov/simple-rails-app-in-k8s/blob/master/-kubernetes/deployment.yaml
https://github.com/d-kononov/simple-rails-app-in-k8s/blob/master/-kubernetes/rake-tasks-job.yaml
https://circleci.com/integrations/
https://www.toptal.com/devops/effective-ci-cd-deployment-pipeline
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。