2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
浏览量:27 次 发布时间:2026-01-23 19:50 作者:明扬工控商城 下载docx
2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
好的,我们继续第十八课。今天学习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性能调优和容量规划。
将本文的Word文档下载到电脑
推荐度: