Linux基础教程 第18课:Linux云计算基础

浏览量:27 次 发布时间:2026-01-23 19:50 作者:明扬工控商城 下载docx

最近更新:Linux基础教程 第15课:Linux内核和驱动管理


好的,我们继续第十八课。今天学习Linux云计算基础,这是现代IT基础设施的核心技术。


第一部分:云计算基础概念

1.1 什么是云计算?

云计算是通过网络按需提供计算资源(如服务器、存储、数据库、网络、软件等)的服务模式。


云计算的五种基本特征:


按需自服务


广泛的网络访问


资源池化


快速弹性伸缩


可计量的服务


1.2 云计算服务模型

bash

# 理解三种服务模型:

# IaaS(基础设施即服务):提供虚拟机、存储、网络等基础设施

# PaaS(平台即服务):提供应用运行平台(数据库、中间件等)

# SaaS(软件即服务):提供完整的应用程序

常见云服务商:


AWS(亚马逊云)


Azure(微软云)


Google Cloud(谷歌云)


阿里云


腾讯云


1.3 虚拟化基础

虚拟化是云计算的基础技术。


bash

# 检查系统是否支持虚拟化

egrep -c '(vmx|svm)' /proc/cpuinfo

# 输出大于0表示支持


# 查看虚拟化类型

sudo kvm-ok


# 安装虚拟化工具

sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager


# 验证KVM安装

sudo systemctl status libvirtd

virsh list --all

第二部分:AWS基础

2.1 AWS核心服务概览

bash

# 安装AWS CLI

sudo apt install -y awscli


# 配置AWS CLI

aws configure

# 需要输入:

# AWS Access Key ID

# AWS Secret Access Key

# 默认区域(如:us-east-1)

# 默认输出格式(如:json)


# 验证配置

aws sts get-caller-identity

2.2 EC2实例管理

bash

# 查看可用的实例类型

aws ec2 describe-instance-types | head -50


# 创建密钥对

aws ec2 create-key-pair --key-name my-key-pair --query 'KeyMaterial' --output text > my-key-pair.pem

chmod 400 my-key-pair.pem


# 创建安全组

aws ec2 create-security-group --group-name my-sg --description "My security group"

aws ec2 authorize-security-group-ingress --group-name my-sg --protocol tcp --port 22 --cidr 0.0.0.0/0

aws ec2 authorize-security-group-ingress --group-name my-sg --protocol tcp --port 80 --cidr 0.0.0.0/0


# 启动EC2实例

aws ec2 run-instances \

   --image-id ami-0c55b159cbfafe1f0 \

   --instance-type t2.micro \

   --key-name my-key-pair \

   --security-groups my-sg \

   --count 1


# 查看实例状态

aws ec2 describe-instances


# 终止实例

aws ec2 terminate-instances --instance-ids i-1234567890abcdef0

2.3 S3存储服务

bash

# 创建S3存储桶

aws s3 mb s3://my-unique-bucket-name


# 上传文件

aws s3 cp file.txt s3://my-unique-bucket-name/


# 列出桶内容

aws s3 ls s3://my-unique-bucket-name/


# 同步目录

aws s3 sync ./local-folder s3://my-unique-bucket-name/remote-folder


# 下载文件

aws s3 cp s3://my-unique-bucket-name/file.txt .


# 删除文件

aws s3 rm s3://my-unique-bucket-name/file.txt


# 删除存储桶(需要先清空内容)

aws s3 rb s3://my-unique-bucket-name --force

第三部分:OpenStack私有云

3.1 OpenStack核心组件

OpenStack是开源的私有云平台。


bash

# 使用DevStack快速部署(开发/测试环境)

# 准备Ubuntu服务器(建议4GB RAM,2核,50GB磁盘)

sudo useradd -s /bin/bash -d /opt/stack -m stack

echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

sudo su - stack


# 下载DevStack

git clone https://opendev.org/openstack/devstack

cd devstack


# 创建local.conf配置文件

cat > local.conf << 'EOF'

[[local|localrc]]

ADMIN_PASSWORD=secret

DATABASE_PASSWORD=$ADMIN_PASSWORD

RABBIT_PASSWORD=$ADMIN_PASSWORD

SERVICE_PASSWORD=$ADMIN_PASSWORD


# 启用基本服务

ENABLED_SERVICES=cinder,c-api,c-vol,c-sch,c-bak,ceilometer-acentral,ceilometer-acompute,ceilometer-anotification,ceilometer-api,ceilometer-collector,ceilometer-ipmi,ceilometer-notification,dstat,g-api,g-reg,horizon,key,mysql,n-api,n-cpu,n-cond,n-crt,n-obj,n-sch,placement-api,placement-client,q-agt,q-dhcp,q-l3,q-meta,q-metering,q-svc,rabbit,tempest


# 设置主机IP(根据实际情况修改)

HOST_IP=192.168.1.100

EOF


# 开始安装(需要较长时间)

./stack.sh

3.2 OpenStack基本操作

bash

# 安装OpenStack客户端

sudo apt install -y python3-openstackclient


# 配置环境变量

source openrc-admin.sh


# 查看服务状态

openstack compute service list

openstack network agent list


# 创建虚拟机镜像

openstack image create "Ubuntu 22.04" --file ubuntu-22.04-server-cloudimg-amd64.img --disk-format qcow2 --container-format bare --public


# 创建网络

openstack network create mynetwork

openstack subnet create --network mynetwork --subnet-range 192.168.100.0/24 mysubnet


# 创建安全组规则

openstack security group rule create --protocol tcp --dst-port 22 default

openstack security group rule create --protocol tcp --dst-port 80 default


# 创建虚拟机实例

openstack server create --flavor m1.tiny --image "Ubuntu 22.04" --network mynetwork --security-group default myinstance


# 查看实例列表

openstack server list

第四部分:Docker容器云

4.1 Docker Swarm集群

bash

# 初始化Swarm集群(在管理节点)

docker swarm init --advertise-addr <MANAGER-IP>


# 输出会显示worker加入命令,例如:

# docker swarm join --token SWMTKN-1-... <MANAGER-IP>:2377


# 在worker节点执行加入命令

docker swarm join --token <TOKEN> <MANAGER-IP>:2377


# 查看节点状态

docker node ls


# 创建服务

docker service create --name web --replicas 3 -p 80:80 nginx


# 查看服务状态

docker service ls

docker service ps web


# 扩展服务

docker service scale web=5


# 更新服务

docker service update --image nginx:alpine web


# 滚动更新

docker service update --update-delay 10s --update-parallelism 2 web


# 查看服务日志

docker service logs web -f

4.2 Docker Compose for Cloud

yaml

# docker-compose-cloud.yml

version: '3.8'


services:

 web:

   image: nginx:alpine

   deploy:

     replicas: 3

     update_config:

       parallelism: 2

       delay: 10s

     restart_policy:

       condition: on-failure

   ports:

     - "80:80"

   networks:

     - webnet


 api:

   image: myapp:latest

   deploy:

     replicas: 2

     placement:

       constraints: [node.role == worker]

   environment:

     - DATABASE_URL=postgres://user:pass@db:5432/mydb

   networks:

     - webnet

     - backend


 db:

   image: postgres:13

   volumes:

     - db-data:/var/lib/postgresql/data

   environment:

     POSTGRES_PASSWORD: secret

   networks:

     - backend


 visualizer:

   image: dockersamples/visualizer:stable

   ports:

     - "8080:8080"

   volumes:

     - /var/run/docker.sock:/var/run/docker.sock

   deploy:

     placement:

       constraints: [node.role == manager]


networks:

 webnet:

 backend:


volumes:

 db-data:

bash

# 部署Stack

docker stack deploy -c docker-compose-cloud.yml myapp


# 查看Stack状态

docker stack ls

docker stack ps myapp

docker stack services myapp


# 删除Stack

docker stack rm myapp

第五部分:Kubernetes基础

5.1 Kubernetes架构概述

text

Master节点:

 - API Server

 - etcd

 - Controller Manager

 - Scheduler


Worker节点:

 - Kubelet

 - Kube-proxy

 - Container Runtime(Docker/containerd)

5.2 使用kubeadm部署Kubernetes

bash

# 准备环境(在所有节点执行)

# 1. 关闭swap

sudo swapoff -a

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab


# 2. 安装Docker

sudo apt update

sudo apt install -y docker.io

sudo systemctl enable docker

sudo systemctl start docker


# 3. 安装kubeadm、kubelet、kubectl

sudo apt update

sudo apt install -y apt-transport-https ca-certificates curl

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update

sudo apt install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl


# 在主节点执行

sudo kubeadm init --pod-network-cidr=10.244.0.0/16


# 配置kubectl

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config


# 安装网络插件(Flannel)

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml


# 获取worker节点加入命令

kubeadm token create --print-join-command


# 在worker节点执行加入命令

# sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>


# 验证集群

kubectl get nodes

kubectl get pods --all-namespaces

5.3 Kubernetes基本操作

bash

# 创建Deployment

kubectl create deployment nginx --image=nginx:latest


# 扩展副本

kubectl scale deployment nginx --replicas=3


# 查看Pod

kubectl get pods

kubectl describe pod <pod-name>


# 查看Deployment

kubectl get deployments

kubectl describe deployment nginx


# 创建Service

kubectl expose deployment nginx --type=NodePort --port=80


# 查看Service

kubectl get services

kubectl describe service nginx


# 访问应用

kubectl get nodes -o wide

# 使用任一节点的IP和NodePort访问


# 更新应用

kubectl set image deployment/nginx nginx=nginx:1.19


# 回滚

kubectl rollout undo deployment/nginx


# 查看历史

kubectl rollout history deployment/nginx


# 删除资源

kubectl delete deployment nginx

kubectl delete service nginx

5.4 Kubernetes配置文件

yaml

# nginx-deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

 name: nginx-deployment

 labels:

   app: nginx

spec:

 replicas: 3

 selector:

   matchLabels:

     app: nginx

 template:

   metadata:

     labels:

       app: nginx

   spec:

     containers:

     - name: nginx

       image: nginx:1.19

       ports:

       - containerPort: 80

       resources:

         requests:

           memory: "64Mi"

           cpu: "250m"

         limits:

           memory: "128Mi"

           cpu: "500m"

       livenessProbe:

         httpGet:

           path: /

           port: 80

         initialDelaySeconds: 3

         periodSeconds: 3


# nginx-service.yaml

apiVersion: v1

kind: Service

metadata:

 name: nginx-service

spec:

 selector:

   app: nginx

 ports:

 - port: 80

   targetPort: 80

 type: LoadBalancer

bash

# 使用配置文件部署

kubectl apply -f nginx-deployment.yaml

kubectl apply -f nginx-service.yaml


# 删除配置创建的资源

kubectl delete -f nginx-deployment.yaml

kubectl delete -f nginx-service.yaml

第六部分:云存储和数据库

6.1 云存储实践

bash

# 使用AWS S3进行备份

#!/bin/bash

# s3-backup.sh


BUCKET="my-backup-bucket"

BACKUP_DIR="/backup"

DATE=$(date +%Y%m%d_%H%M%S)


# 创建备份

tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" /data


# 上传到S3

aws s3 cp "$BACKUP_DIR/backup_$DATE.tar.gz" "s3://$BUCKET/"


# 保留最近7天备份

find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete

6.2 云数据库(RDS示例)

bash

# 创建RDS实例

aws rds create-db-instance \

   --db-instance-identifier mydb \

   --db-instance-class db.t2.micro \

   --engine mysql \

   --master-username admin \

   --master-user-password secret123 \

   --allocated-storage 20


# 查看实例状态

aws rds describe-db-instances


# 连接数据库

mysql -h mydb.xxxxxx.us-east-1.rds.amazonaws.com -u admin -p


# 创建只读副本

aws rds create-db-instance-read-replica \

   --db-instance-identifier mydb-readonly \

   --source-db-instance-identifier mydb

6.3 Kubernetes持久化存储

yaml

# persistent-volume.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

 name: mysql-pv

spec:

 capacity:

   storage: 10Gi

 accessModes:

   - ReadWriteOnce

 persistentVolumeReclaimPolicy: Retain

 hostPath:

   path: /data/mysql


# persistent-volume-claim.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

 name: mysql-pvc

spec:

 accessModes:

   - ReadWriteOnce

 resources:

   requests:

     storage: 10Gi


# mysql-deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

 name: mysql

spec:

 selector:

   matchLabels:

     app: mysql

 template:

   metadata:

     labels:

       app: mysql

   spec:

     containers:

     - name: mysql

       image: mysql:5.7

       env:

       - name: MYSQL_ROOT_PASSWORD

         value: "secret"

       ports:

       - containerPort: 3306

       volumeMounts:

       - name: mysql-storage

         mountPath: /var/lib/mysql

     volumes:

     - name: mysql-storage

       persistentVolumeClaim:

         claimName: mysql-pvc

第七部分:云网络和安全

7.1 云网络安全组

bash

# AWS安全组管理

aws ec2 create-security-group --group-name myapp-sg --description "My application security group"


# 添加入站规则

aws ec2 authorize-security-group-ingress \

   --group-name myapp-sg \

   --protocol tcp \

   --port 22 \

   --cidr 0.0.0.0/0


aws ec2 authorize-security-group-ingress \

   --group-name myapp-sg \

   --protocol tcp \

   --port 80 \

   --cidr 0.0.0.0/0


aws ec2 authorize-security-group-ingress \

   --group-name myapp-sg \

   --protocol tcp \

   --port 443 \

   --cidr 0.0.0.0/0


# 添加VPC内部访问规则

aws ec2 authorize-security-group-ingress \

   --group-name myapp-sg \

   --protocol all \

   --source-group myapp-sg

7.2 Kubernetes网络策略

yaml

# network-policy.yaml

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

 name: app-network-policy

 namespace: default

spec:

 podSelector:

   matchLabels:

     app: myapp

 policyTypes:

 - Ingress

 - Egress

 ingress:

 - from:

   - namespaceSelector:

       matchLabels:

         project: myproject

   - podSelector:

       matchLabels:

         role: frontend

   ports:

   - protocol: TCP

     port: 80

 egress:

 - to:

   - ipBlock:

       cidr: 10.0.0.0/24

   ports:

   - protocol: TCP

     port: 443

 - to:

   - namespaceSelector:

       matchLabels:

         project: myproject

   ports:

   - protocol: TCP

     port: 3306

第八部分:云监控和日志

8.1 云原生监控(Prometheus + Grafana)

bash

# 安装Prometheus Operator

kubectl create namespace monitoring

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm repo update

helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring


# 查看安装状态

kubectl get pods -n monitoring


# 访问Grafana(端口转发)

kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80


# 浏览器访问 http://localhost:3000

# 默认用户名:admin,密码:prom-operator

8.2 云日志收集

yaml

# fluentd-daemonset.yaml

apiVersion: apps/v1

kind: DaemonSet

metadata:

 name: fluentd

 namespace: kube-system

 labels:

   k8s-app: fluentd-logging

spec:

 selector:

   matchLabels:

     name: fluentd

 template:

   metadata:

     labels:

       name: fluentd

   spec:

     serviceAccountName: fluentd

     tolerations:

     - key: node-role.kubernetes.io/master

       effect: NoSchedule

     containers:

     - name: fluentd

       image: fluent/fluentd-kubernetes-daemonset:v1.16-debian-elasticsearch8

       env:

         - name: FLUENT_ELASTICSEARCH_HOST

           value: "elasticsearch-logging"

         - name: FLUENT_ELASTICSEARCH_PORT

           value: "9200"

         - name: FLUENT_ELASTICSEARCH_SCHEME

           value: "http"

       resources:

         limits:

           memory: 200Mi

         requests:

           cpu: 100m

           memory: 200Mi

       volumeMounts:

       - name: varlog

         mountPath: /var/log

       - name: varlibdockercontainers

         mountPath: /var/lib/docker/containers

         readOnly: true

     terminationGracePeriodSeconds: 30

     volumes:

     - name: varlog

       hostPath:

         path: /var/log

     - name: varlibdockercontainers

       hostPath:

         path: /var/lib/docker/containers

第九部分:云成本优化

9.1 云资源成本分析

bash

# AWS成本分析工具

aws ce get-cost-and-usage \

   --time-period Start=2024-01-01,End=2024-01-31 \

   --granularity MONTHLY \

   --metrics "BlendedCost" "UnblendedCost" "UsageQuantity" \

   --group-by Type=DIMENSION,Key=SERVICE


# 查看闲置资源

aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"

aws rds describe-db-instances


# 使用AWS Cost Explorer API

aws ce get-reservation-utilization \

   --time-period Start=2024-01-01,End=2024-01-31

9.2 Kubernetes资源优化

yaml

# 资源请求和限制示例

apiVersion: apps/v1

kind: Deployment

metadata:

 name: optimized-app

spec:

 template:

   spec:

     containers:

     - name: app

       image: myapp:latest

       resources:

         requests:

           memory: "64Mi"

           cpu: "250m"

         limits:

           memory: "128Mi"

           cpu: "500m"

bash

# 查看资源使用情况

kubectl top nodes

kubectl top pods


# 自动扩缩容(HPA)

kubectl autoscale deployment nginx --cpu-percent=50 --min=2 --max=10


# 查看HPA状态

kubectl get hpa

第十部分:练习项目

项目1:搭建私有云平台

使用OpenStack搭建一个小型私有云:


安装和配置OpenStack


创建虚拟网络


部署虚拟机实例


配置负载均衡


设置监控和告警


项目2:容器云平台部署

使用Kubernetes部署微服务应用:


部署Kubernetes集群(3节点)


部署应用(3个微服务)


配置服务发现和负载均衡


设置持久化存储


配置监控和日志收集


项目3:混合云架构

设计并实现混合云架构:


在公有云部署Web层


在私有云部署数据库层


配置VPN连接


实现数据同步


配置灾难恢复


项目4:云原生应用开发

开发云原生应用并部署:


使用Docker容器化应用


编写Kubernetes部署文件


配置CI/CD流水线


部署到云平台


性能测试和优化


今日总结

今天我们学习了Linux云计算基础:


云计算概念:服务模型、部署模式、关键技术


公有云:AWS基础服务和操作


私有云:OpenStack部署和管理


容器云:Docker Swarm和Kubernetes


云存储和数据库:S3、RDS、持久化存储


云网络和安全:安全组、网络策略


云监控和日志:Prometheus、Grafana、Fluentd


云成本优化:资源管理和成本控制


云计算核心技能:


理解不同云服务模型和部署模式


掌握至少一个主要云平台的操作


熟练使用容器和编排技术


能够设计高可用、可扩展的云架构


了解云安全和成本优化


云计算是数字化转型的基础设施,掌握这些技能对于现代IT专业人员至关重要。


有问题吗?完成练习项目后,我们可以继续第十九课:Linux性能调优和容量规划。


明扬工控商城

推荐阅读:

Linux基础教程 第20课:Linux安全攻防和渗透测试基础

Linux基础教程 第19课:性能调优和容量规划

Linux基础教程 第18课:Linux云计算基础

Linux基础教程 第17课:自动化运维工具

Linux基础教程 第16课:集群和高可用性

Linux基础教程 第15课:Linux内核和驱动管理

热门标签:
Linux基础教程 第18课:Linux云计算基础.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网