AWS의 GCP Anthos 클러스터
13889 단어 gcpawskubernetesanthos
시작하자.
AWS 클라우드 셸
AWS 콘솔에 로그인하고 상단 표시줄에서 Cloud Shell에 액세스합니다. 아래와 같은 프롬프트가 표시되어야 합니다.
[cloudshell-user@ip-10-0-89-211 ~]$
EC2
다음 명령을 사용하여 다른 관련 구성 요소로 EC2 인스턴스를 생성합니다. 각 명령이 수행하는 작업에 대한 설명은 여기를 참조하십시오.
$ mkdir ~/.aws
$ cat ~/.aws/config <<EOF
[default]
region=ap-south-1
EOF
$ export CIDR_BLOCK="10.10.10.0/28"
$ aws ec2 create-vpc --cidr-block $CIDR_BLOCK
$ export ANTHOS_VPC_ID=$(aws ec2 describe-vpcs | jq -r '.Vpcs[] | select(.CidrBlock == env.CIDR_BLOCK) | .VpcId')
$ aws ec2 create-internet-gateway --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=anthos-igw}]'
$ export ANTHOS_IGW_ID=$(aws ec2 describe-internet-gateways --filters Name=tag:Name,Values=anthos-igw --query "InternetGateways[*].InternetGatewayId" --output text)
$ aws ec2 attach-internet-gateway --internet-gateway-id $ANTHOS_IGW_ID --vpc-id $ANTHOS_VPC_ID
$ export ANTHOS_RTB_ID=$(aws ec2 describe-route-tables | jq -r '.RouteTables[] | select(.VpcId == env.ANTHOS_VPC_ID) | .RouteTableId')
$ aws ec2 create-route --route-table-id $ANTHOS_RTB_ID --destination-cidr-block 0.0.0.0/0 --gateway-id $ANTHOS_IGW_ID
$ aws ec2 create-subnet --cidr-block $CIDR_BLOCK --vpc-id $ANTHOS_VPC_ID
$ export ANTHOS_SUBNET_ID=$(aws ec2 describe-subnets | jq -r '.Subnets[] | select(.CidrBlock == env.CIDR_BLOCK) | .SubnetId')
$ export ANTHOS_AVAILABILITY_ZONE=$(aws ec2 describe-subnets | jq -r '.Subnets[] | select(.CidrBlock == env.CIDR_BLOCK) | .AvailabilityZone')
$ aws ec2 create-security-group --group-name anthos-sg --description "anthos security group" --vpc-id $ANTHOS_VPC_ID
$ export ANTHOS_SG_ID=$(aws ec2 describe-security-groups | jq -r '.SecurityGroups[] | select(.GroupName == "anthos-sg") | .GroupId')
$ aws ec2 describe-instance-types | jq '.InstanceTypes[] | select(.MemoryInfo.SizeInMiB == 7680) | (.InstanceType, .VCpuInfo.DefaultVCpus)'
"c4.xlarge"
4
$ aws ec2 describe-instance-types | jq '.InstanceTypes[] | select(.MemoryInfo.SizeInMiB == 8192) | select (.VCpuInfo.DefaultVCpus == 2) | .InstanceType' | sort
"m4.large"
"m5ad.large"
"m5a.large"
"m5d.large"
"m5.large"
"m6a.large"
"m6gd.large"
"m6g.large"
"m6i.large"
"t2.large"
"t3a.large"
"t3.large"
"t4g.large"
$ aws ec2 describe-instance-type-offerings --location-type availability-zone | jq '.InstanceTypeOfferings[] | select(.Location == env.ANTHOS_AVAILABILITY_ZONE) | .InstanceType' | grep t2.large
"t2.large"
$ aws ec2 create-key-pair --key-name anthosKeyPair --query 'KeyMaterial' --output text > anthosKeyPair.pem
$ mkdir .ssh
$ mv anthosKeyPair.pem ~/.ssh/
$ aws ec2 run-instances --image-id ami-0bba4b75264ecbfbd --count 1 --instance-type t2.large --key-name anthosKeyPair --security-group-ids $ANTHOS_SG_ID --subnet-id $ANTHOS_SUBNET_ID --associate-public-ip-address --block-device-mappings 'DeviceName=/dev/sda1,Ebs={VolumeSize=200}'
이제 인스턴스가 생성되었습니다. 우리는 그것에 이름을 줄 수 있습니다.
$ ANTHOS_INSTANCE_ID=$(aws ec2 describe-instances | jq -r '.Reservations[] | .Instances[] | select(.SubnetId==env.ANTHOS_SUBNET_ID) | .InstanceId')
$ aws ec2 create-tags --resources $ANTHOS_INSTANCE_ID --tags Key=Name,Value=anthos-node
SSH
Cloud Shell에서 Anthos 인스턴스로 SSH를 수행하려면 먼저 Cloudshell의 공개 IP를 가져와 SSH 액세스를 허용하는 규칙을 보안 그룹에 추가해야 합니다.
$ export MY_PUBLIC_IP=$(curl ifconfig.me --silent)
$ aws ec2 authorize-security-group-ingress --group-id $ANTHOS_SG_ID --protocol tcp --port 22 --cidr $MY_PUBLIC_IP/32
Anthos 클러스터 구성에서 필요에 따라 SSH 키 쌍을 인스턴스에 복사합니다.
$ export ANTHOS_INSTANCE_IP=$(aws ec2 describe-instances --filter Name=tag:Name,Values=anthos-node --query "Reservations[*].Instances[*].PublicIpAddress" --output text)
$ scp -i ~/.ssh/anthosKeyPair.pem ~/.ssh/anthosKeyPair.pem ubuntu@$ANTHOS_INSTANCE_IP:~/.ssh/anthosKeyPair.pem
SSH를 통해 인스턴스에 연결합니다.
$ ssh -i ~/.ssh/anthosKeyPair.pem ubuntu@$ANTHOS_INSTANCE_IP
gcloud 설치
Anthos 인스턴스에 gcloud cli를 설치합니다.
sudo apt-get install apt-transport-https ca-certificates gnupg -y
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
sudo apt-get update -y && sudo apt-get install google-cloud-cli -y
gcloud에 로그인
이 단계는 선택 사항입니다. CLI에서 직접 서비스 계정을 만들려는 경우 계정으로 gcloud cli에 로그인합니다.
gcloud auth login
입증
GCP에서 service account을 만들고 다음 역할을 부여합니다.
roles/gkehub.connect
roles/gkehub.admin
roles/logging.logWriter
roles/monitoring.metricWriter
roles/monitoring.dashboardEditor
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
gcloud CLI를 사용하는 경우 다음 명령어를 사용하여 서비스 계정을 만들고 역할을 바인딩할 수 있습니다.
gcloud iam service-accounts create <service-account-name>
gcloud projects add-iam-policy-binding "$PROJECT_ID" \
--member=<service-account-client-email> \
--role=<role> \
--no-user-output-enabled
서비스 계정의 키를 만들고 자격 증명을 복사합니다.
gcloud iam service-accounts keys create <key-file-path> \
--iam-account=${service-account-name}@${PROJECT_ID}.iam.gserviceaccount.com
인스턴스에서 자격 증명을 설정하고 서비스 계정을 활성화하고 프로젝트 ID를 설정합니다.
$ mkdir .gcloud
$ export PROJECT_ID=<project_id>
$ cat > .gcloud/keyfile.json << EOF
{
"type": "service_account",
"project_id": $PROJECT_ID,
"private_key_id": "<private_key_id>",
"private_key": <private_key>,
"client_email": <client_email>,
"client_id": <client_id>,
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": <client_x509_cert_url>
}
EOF
$ gcloud auth activate-service-account <client_email> --key-file .gcloud/keyfile.json
$ export GOOGLE_APPLICATION_CREDENTIALS='/home/ubuntu/.gcloud/keyfile.json'
$ gloud config set project $PROJECT_ID
아피스
서비스를 활성화합니다.
gcloud services enable \
anthos.googleapis.com \
anthosaudit.googleapis.com \
anthosgke.googleapis.com \
cloudresourcemanager.googleapis.com \
container.googleapis.com \
gkeconnect.googleapis.com \
gkehub.googleapis.com \
serviceusage.googleapis.com \
stackdriver.googleapis.com \
monitoring.googleapis.com \
logging.googleapis.com \
opsconfigmonitoring.googleapis.com
기타 도구
kubectl, bmctl 및 도커를 설치합니다.
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/sbin/
gsutil cp gs://anthos-baremetal-release/bmctl/1.13.0/linux-amd64/bmctl .
chmod a+x bmctl
sudo mv bmctl /usr/local/sbin/
curl -O https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
tar xzvf docker-20.10.9.tgz
sudo cp docker/* /usr/bin/
rm -rf docker*
sudo groupadd docker
sudo usermod -aG docker $USER
sudo dockerd&
newgrp docker
VxLAN
IP 10.200.2/24로 vxlan을 설정합니다.
sudo ip link add vxlan0 type vxlan id 42 dev eth0 dstport 0
sudo ip addr add 10.200.0.2/24 dev vxlan0
sudo ip link set up dev vxlan0
클러스터 구성
bmctl로 Anthos 클러스터 구성을 만듭니다.
export CLUSTER_ID=anthos-aws
bmctl create config -c $CLUSTER_ID
구성을 변경합니다.
$ cat > bmctl-workspace/${CLUSTER_ID}/${CLUSTER_ID}.yaml << EOF
---
gcrKeyPath: /home/ubuntu/.gcloud/keyfile.json
sshPrivateKeyPath: /home/ubuntu/.ssh/anthosKeyPair.pem
gkeConnectAgentServiceAccountKeyPath: /home/ubuntu/.gcloud/keyfile.json
gkeConnectRegisterServiceAccountKeyPath: /home/ubuntu/.gcloud/keyfile.json
cloudOperationsServiceAccountKeyPath: /home/ubuntu/.gcloud/keyfile.json
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-${CLUSTER_ID}
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: ${CLUSTER_ID}
namespace: cluster-${CLUSTER_ID}
spec:
profile: edge
type: standalone
anthosBareMetalVersion: 1.13.0
gkeConnect:
projectID: $PROJECT_ID
controlPlane:
nodePoolSpec:
clusterName: ${CLUSTER_ID}
nodes:
- address: 10.200.0.2
clusterNetwork:
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 172.26.232.0/24
loadBalancer:
mode: bundled
ports:
controlPlaneLBPort: 443
vips:
controlPlaneVIP: 10.200.0.49
ingressVIP: 10.200.0.50
addressPools:
- name: pool1
addresses:
- 10.200.0.50-10.200.0.70
clusterOperations:
location: asia-south1
projectID: $PROJECT_ID
storage:
lvpNodeMounts:
path: /mnt/localpv-disk
storageClassName: node-disk
lvpShare:
numPVUnderSharedPath: 5
path: /mnt/localpv-share
storageClassName: local-shared
nodeConfig:
podDensity:
maxPodsPerNode: 64
nodeAccess:
loginUser: ubuntu
EOF
클러스터 생성
클러스터를 만듭니다.
$ bmctl create cluster -c ${CLUSTER_ID}
위의 명령은 다소 시간이 걸리며 성공하면 kubernetes 클러스터가 준비됩니다.
$ export KUBECONFIG=bmctl-workspace/${CLUSTER_ID}/${CLUSTER_ID}-kubeconfig
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-0-9 Ready control-plane,master 153m v1.24.2-gke.1900
클러스터가 GCP의 Anthos clusters plage에 표시되어야 합니다.
워크로드 실행
샘플 nginx 배포로 테스트합니다.
$ cat > deploy.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
selector:
matchLabels:
app: nginx
EOF
$ kubectl create -f deploy.yaml
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 65s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-8f458dc5b-jvrbb 1/1 Running 0 68s
이 배포를 서비스와 함께 노출합니다.
$ cat > svc.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
ports:
- port: 8080
targetPort: 80
name: web-server
EOF
$ kubectl create -f svc.yaml
$ kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx ClusterIP 172.26.232.21 <none> 8080/TCP 106s
$ kubectl get ep nginx
NAME ENDPOINTS AGE
nginx 192.168.0.48:80 2m3s
서비스 IP를 컬링하고 작동하는지 확인하십시오.
$ curl 172.26.232.21:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
클러스터 재설정
더 이상 필요하지 않으면 마지막으로 클러스터를 재설정합니다.
bmctl reset cluster -c ${CLUSTER_ID}
따라서 Anthos on AWS로 단일 노드 kubernetes 클러스터를 시작하고 nginx 서비스를 실행하여 테스트했습니다.
읽어 주셔서 감사합니다!!!
Reference
이 문제에 관하여(AWS의 GCP Anthos 클러스터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/networkandcode/gcp-anthos-cluster-on-aws-19p8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)