云的基础是虚拟化:服务器,存储,网络。服务器是远程计算机的逻辑分区。存储是物理硬盘的逻辑划分。网络则是虚拟私有云。
谷歌是唯一一个拥有全球私有基础设施的公司;他们的谷歌云基础设施没有任何一部分通过公共互联网。换句话说,谷歌的云基础设施完全建立在他们自己的私有网络上,而不是依赖于公共互联网的网络基础设施。
谷歌以其为其服务开发革命性技术而闻名,一旦他们有了更好的版本,旧版本就会向全世界开源。
TensorFlow就是这些技术之一。 TensorFlow 是 Google 的 AI 引擎,也是 Google 搜索的核心。现在最新的是kubeFlow!
安全的全球专用网络:Google Cloud 是一个大型专用网络;没有任何东西通过公共互联网传播。使用 Cloud CDN 时,来自源的流量会穿过此专有光纤网络,并通过最靠近客户的位置进行传送。大多数研究公司选择 GCP,因为没有网络连接到互联网。
Kubernetes 引擎的创建者:Kubernetes 是由 Google 设计和创建的容器编排工具,用于管理其基础设施。部署了数百万个容器来托管 Google 服务,而 Kubernetes 是这些容器的核心。 Google 开源了这项技术,并提供了 Google 管理的 Kubernetes 引擎作为服务。
收费方式按秒计费,新用户前三个月有300美刀信用额度。
人工智能和机器学习服务:毫无疑问,谷歌是数据之王。数据越多,模型在人工智能世界中产生的结果就越准确。谷歌的机器学习服务是最好的。 Google 提供了多种 ML 服务来训练模型并处理模型训练管道。Kubeflow现在是 ML 操作的趋势。同样,KubeFlow 基于 Google 内部方法将 TensorFlow 模型部署到 Kubernetes,称为 TensorFlow Extended。
超好的官方资源codelabs
所有的资源服务都是一种API。从API&Service中就可以查看所有的API。有些服务在创建项目的时候就已经激活,有些则需要在使用的时候手动激活。
API Explorer可以轻松从网页尝试调试API(就算没激活都可以试用,厉害)。一般来说如果 API 请求失败,要么是没设置账户,要么是该服务还没被你激活。
Cloud Operations:Monitoring,Dashboard,Metrics Explorer,Alerting,通过group可以整合资源管理,通过setting可以增加pj和account统一管理。其他还有logging,error report,trace服务。
计费账户:可以为每个部门单位创建计费账户,或者别的什么单位。可以在项目Project上(三个点)设置它的计费账户。或者可以在新建项目的时候选择收费账户。这样就可以查看每个project的总费用。
操作需要的权限:(Billing Administrator role)或者 (Project Creator and Billing Account User)
Command:gcloud alpha/beta billing accounts list
注意:一开始的300美元积分,仅限第一个积分账户。最好把测试用的PJ都关联到第一个计费账户来使用。
预算和警报:预算和警报,是以计费账户为单位的。通过阈值在到达指定金额时,发送提醒邮件给我们,好让我们采取行动。
BillingExport:计费输出将费用数据输出到BigQuery。需要激活Bigquery Data transfer API。
如果你是发票结算账户,付款需要联系GCP销售团队,可以电汇或支票结算,每月将收到发票。
价格计算服务:Pricing Calculator:keyword:updated prices, latest prices, cost estimation
通过定制化应用(Custom Applications)交互:REST-based API
整个GCP层级如下:组织(如果你的账户域名是组织类型比如google workspace账号的话)- 文件夹folder - 项目projects - 资源resource(gmail账号是无组织的)
basic role,predefined role,custom role
IAM对GCS管理包括均一管理也就是只使用IAM,和细管理,也就是同时使用IAM和ACL的管理。
IAM包括四种账户:Google Account, Service Account, Google Groups, Cloud Identity Domain。
IAM Policy:用json方式写的权限控制方式,成员,角色,资源,以及按需条件。
可以输出到GCS作为担保性的archive,如果需要是随时可以查看的形式,可以输出到BQ
日志流处理构架: Logging -> Pub/Sub -> Dataflow -> Bigquery
实时调试云应用程序,无需重新启动或停止
自动收集和分析错误和异常
Nodes run containers. Nodes are VMs (in GKE they’re Compute Engine instances).
对于Workload可以进行设置和deploy。设置内容:application name, namespace, labels, cluster。这里namespace很重要,他是区分不同code的方式,比如一个node可以有很多版本的code,这里就是通过namespace区分的。
部署image后会有一个端口URL,通过requests请求就可以执行在image中部署的代码了。
split traffic
可以进行canary test。codelabs:https://codelabs.developers.google.com/codelabs/cloud-app-engine-python3#0
gcloud auth activate-service-account --key-file [path/to/key_file.json]
pip3 install pyopenssl
gsutil signurl -d 10m -u gs://[bucket_name]/demo.txt
codelabs:https://codelabs.developers.google.com/codelabs/cloud-bigtable-intro-java#0
bq query --use_legacy_sql=false --dry_run 'SELECT * FROM bigquery-public-data.stackoverflow.posts_answers LIMIT 1000'
其中的dry_run
可以提示计算成本。和AWS的snow家族一样,是通过物理设备传送数据
目标和用途:
核心技术:
典型使用场景:
与其他 GCP 服务的集成:
一个使用流程的案例:
gcloud auth list
;list pjs: gcloud config list project
)gcloud pubsub subscriptions pull --auto-ack MySub_name
gsutil notification create -t MyTopic -f json gs://bucket_name
是一个完全托管的流数据分析服务,可用于实时处理无限数据流。它基于Apache Beam编程模型,能够在多种执行环境中运行相同的数据处理代码,包括批处理和流式处理。
主要特点:
Dataflow广泛应用于ETL、实时数据处理、数据集成、数据分析等场景。用户可以在托管集群环境或自己的私有集群上运行Dataflow管道。它与BigQuery、Cloud Storage、Cloud Pub/Sub等GCP产品紧密集成。总的来说,Dataflow提供了一种简单、统一且富有弹性的方式来处理大规模数据。
Dataflow vs. Cloud Composer:
Cloud Composer 是一个工作流编排工具,用于管理和调度复杂的工作流,适合在跨系统或跨服务的任务之间进行协调和自动化。
SSL offload(SSL 卸载)是一种网络安全技术,旨在减轻服务器负载和提高性能。在 SSL offload 中,SSL(安全套接层)和 TLS(传输层安全)的加密和解密操作从服务器转移到专门的硬件设备或者专用的 SSL 加速器中进行处理。
通常情况下,当客户端与服务器之间建立安全连接时,会使用 SSL/TLS 协议对通信进行加密。加密和解密操作对服务器的 CPU 和内存等资源造成了较大的负担,特别是在高负载情况下。为了减轻服务器的负载并提高性能,可以使用 SSL offload 技术。
SSL offload 的工作原理如下:
使用 SSL offload 技术的主要优势包括:
总的来说,SSL offload 技术是一种有效的网络安全技术,可以帮助提高服务器的性能和可用性,并简化 SSL/TLS 配置和管理。
SSL Proxy(SSL 代理)是一种网络设备或服务,用于在客户端和服务器之间拦截、检查和修改 SSL/TLS 加密通信流量。SSL Proxy 在传输层上建立连接,同时充当客户端和服务器之间的中间人,使得它能够对加密通信进行解密和重新加密,以便检查、修改或过滤通信内容。
SSL Proxy 的主要功能包括:
解密和重新加密:SSL Proxy 拦截经过其的 SSL/TLS 加密流量,将其解密以便检查通信内容,然后重新加密并转发给目标服务器或客户端。
内容过滤:SSL Proxy 可以检查加密通信的内容,过滤掉不安全或不符合策略的内容,如恶意软件、广告、敏感信息等。
访问控制:SSL Proxy 可以基于特定的访问策略对加密通信进行访问控制,包括阻止或允许特定的域名、URL、IP 地址等。
流量监控和分析:SSL Proxy 可以监控和分析 SSL/TLS 加密流量,以便了解网络流量的模式、趋势和性能,并提供报告和分析。
SSL Proxy 在网络安全和内容过滤方面具有重要作用,尤其是在企业网络中用于监控和控制员工访问互联网的行为,以及在安全网关和防火墙中用于检测和防范网络威胁。然而,使用 SSL Proxy 也可能引发隐私和安全方面的顾虑,因为它涉及到对加密通信进行解密和重新加密的操作,可能会暴露用户的敏感信息。因此,在部署 SSL Proxy 时需要谨慎考虑隐私和安全问题,并遵循适当的法律法规和隐私政策。
TCP Proxy(传输控制协议代理)是一种网络设备或服务,用于在传输层拦截、检查和转发 TCP 数据流量。TCP Proxy 充当客户端和服务器之间的中间人,允许它在建立 TCP 连接时拦截数据,检查数据内容,并根据特定的规则对数据进行处理或者转发给目标服务器。
TCP Proxy 的主要功能包括:
数据转发:TCP Proxy 可以将来自客户端的 TCP 请求转发给目标服务器,并将服务器的响应转发给客户端,使得客户端和服务器之间的通信能够顺利进行。
流量监控和分析:TCP Proxy 可以监控和分析 TCP 数据流量,包括连接建立、数据传输、连接关闭等过程,以便了解网络流量的模式、趋势和性能,并提供报告和分析。
访问控制:TCP Proxy 可以根据特定的访问策略对 TCP 数据流量进行访问控制,包括阻止或允许特定的 IP 地址、端口号、协议等。
负载均衡和高可用性:TCP Proxy 可以用于实现负载均衡和故障转移,将请求转发给多个目标服务器,并在服务器发生故障时自动切换到备用服务器。
安全防护:TCP Proxy 可以用于实现网络安全防护,包括防火墙、入侵检测和防护等功能,以保护网络免受网络攻击和恶意活动的威胁。
TCP Proxy 在网络通信和安全方面具有重要作用,尤其是在企业网络中用于监控和控制对外网络访问的行为,以及在负载均衡和高可用性方面用于优化网络性能。它可以帮助组织提高网络安全性、可用性和性能,并提供更好的用户体验。
SSL Proxy 和 TCP Proxy 在功能和应用方面有一些重要的区别:
总的来说,SSL Proxy 和 TCP Proxy 在处理的通信协议、加密处理方式和应用场景上有所不同。SSL Proxy 主要用于处理 SSL/TLS 加密的通信流量,并进行解密和重新加密操作,而 TCP Proxy 则用于处理基于 TCP 协议的通信流量,但不涉及对加密通信的解密操作。
“Preserve Client IP” 是一种网络技术,用于确保在经过代理或负载均衡器时,服务端能够获取到客户端的真实 IP 地址。在常规的网络通信中,客户端的 IP 地址可能会被代理或负载均衡器替换为其自身的 IP 地址,导致服务端无法获取到客户端的真实 IP 地址,而是获取到了代理或负载均衡器的 IP 地址。
为了解决这个问题,可以使用 “Preserve Client IP” 技术来确保服务端能够获取到客户端的真实 IP 地址。这通常涉及到在代理或负载均衡器上进行配置,以便将客户端的真实 IP 地址传递给服务端。具体实现方式包括:
传递 HTTP 标头:代理或负载均衡器可以将客户端的真实 IP 地址作为 HTTP 请求的一个标头字段(如 X-Forwarded-For)传递给服务端。服务端可以从这个标头字段中获取客户端的真实 IP 地址。
设置自定义标头:有些代理或负载均衡器支持设置自定义的标头字段来传递客户端的真实 IP 地址。服务端需要根据代理或负载均衡器的配置来获取这个自定义的标头字段。
使用代理协议:有些代理或负载均衡器支持一些特定的代理协议,这些协议可以在通信中包含客户端的真实 IP 地址。服务端需要根据代理协议来解析客户端的真实 IP 地址。
通过使用 “Preserve Client IP” 技术,服务端就可以获得客户端的真实 IP 地址,从而进行相关的访问控制、日志记录、统计分析等操作,而不是获取到代理或负载均衡器的 IP 地址。这对于需要了解客户端的真实来源和行为的应用场景非常重要。
三种方法安装,docker,非docker,服务台的CloudShell。
# docker install
docker pull gcr.io/google.com/cloudsdktool/cloud-sdk:latest
docker run --rm gcr.io/google.com/cloudsdktool/cloud-sdk:latest gcloud version
# docker config
docker run -ti --name gcloud-config gcr.io/google.com/cloudsdktool/cloud-sdk gcloud auth login
docker run --rm --volumes-from gcloud-config gcr.io/google.com/cloudsdktool/cloud-sdk gcloud config list
# not docker config
gcloud init
SDK中所有的组建:使用gcloud components list
可以列出来。知道了组件甚至可以猜出命令行。组件如下:
更新命令:gcloud components update
安装新的组件的推介方法:sudo apt-get install google-cloud-sdk-minikube
命令构成:
gcloud + release level (optional:alpha/beta) + component + entity + operation + positional args + flags
For example: gcloud + compute + instances + create + example-instance-1 + --zone=us-central1-a
登陆:gcloud auth login
配置:使用命令设置默认项目gcloud config set project <project ID>
当您登录 gcloud CLI 时,命令gcloud config list
显示了当前配置,但是,我们可以有多个配置,gcloud config configurations list
并将列出所有可用的配置。
要创建新配置,请使用gcloud config configurations create <name>
命令。
撤销当前设置的PJgcloud config unset project
激活默认的配置gcloud config configurations activate default
gcloud命令:
gcloud beta compute --project=[PROJECT_NAME] instances create instance-2 --zone=us-central1-a
$ gcloud compute instances create myinstance
Created [...].
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X # 这里的外部IP可以用于外部的网络访问
STATUS: RUNNING
gcloud beta compute instances list
gcloud beta compute instances delete instance_name --zone zone_name
$ gcloud compute firewall-rules create allow-80 --allow tcp:80
Created [...].
NAME: allow-80
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False
gcloud compute ssh --zone us-central1-a [username]@[instance_name/host_name]
,另外所有的ssh key都在GCE的metadata页面中。在这个页面可以设置key的pub文件。
```bash
$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added ‘compute.12345’ (ECDSA) to the list of known hosts.
…yourusername@myinstance:~#
- 使用自定义的启动脚本创建GCE
```bash
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
$ gcloud compute target-pools create nginx-pool
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
$ gcloud compute instances list
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X # 这个地址可以访问lb地址了
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
$ gcloud compute forwarding-rules delete nginx-lb
$ gcloud compute instance-groups managed delete nginx-group
$ gcloud compute target-pools delete nginx-pool
$ gcloud compute instance-templates delete nginx-template
$ gcloud compute instances delete nginx
$ gcloud compute instances delete myinstance
$ gcloud compute firewall-rules delete allow-80
如果是windowsGCE需要用RDP客户端,这对于Linux就是ssh。
# create sql instance
gcloud sql instances create [instance-name]
# create database in the instance
gcloud sql databases create [database-name] --instance [instance-name]
# connect to CloudSQL / need activate CloudSQL Admin API
gcloud sql connect [project name] --user=root --quiet
# or user mysql client
mysql -h [IP-of-instance] -u [user] -p
# delete the instance
gcloud sql instances delete [instance-name]
gcloud spanner instances list
gcloud spanner databases list --instance [INSTANCE-ID]
gcloud spanner instances delete [Instance-ID]
CREATE OR REPLACE TABLE `stackoverflow.questions_2018_clustered`
PARTITION BY
DATE(creation_date)
CLUSTER BY
tags AS
SELECT
id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags
FROM
`bigquery-public-data.stackoverflow.posts_questions`
WHERE
creation_date BETWEEN '2018-01-01' AND '2019-01-01';
# create
gsutil mb gs://<bucketname>
# list
gsutil ls
# upload
gsutil mv ./demo.txt gs://[bucketname]
gsutil cp ./demo.txt gs://[bucketname]
# multithread upload
gsutil -m mv . gs://cloudstoragelab/
# upload bigfile by chunks
gsutil -o GSUTIL:parallel_composite_upload_component_size=10M mv [bigfile] gs://[bucketname]
# get
gsutil lifecycle get gs://cloudstoragelab/
# set rules by json file
gsutil lifecycle set rules.json gs://[bucket_name]
删除cluster:gcloud container clusters delete [cluster-name] --zone [zone]
# enable api
gcloud services enable container.googleapis.com
# create cluster
gcloud container clusters create fancy-cluster --num-nodes 3
# create container
# enable cloud build api
gcloud services enable cloudbuild.googleapis.com
# create image
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
# deploy container to gke
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0
# delete pod
kubectl delete pod/<POD_NAME>
# check the status of pod service and deployment
kubectl get all
# espose the service
kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080
# get the service info of cluster ip, external ip and ports
kubectl get service
# scale the deployment to 3
kubectl scale deployment monolith --replicas=3
# rebuild application image with a new version!
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
# deploy the new version without downtime
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
codeslabs:https://codelabs.developers.google.com/codelabs/cloud-deploy-website-on-gke#0
gcloud compute instance-groups managed \
set-autoscaling instance-group-2 \
--max-num-replicas 3 \
--min-num-replicas 1 \
--target-cpu-utilization 0.60 \
--cool-down-period 120 \
--zone=us-central1-a