云原生技术正在改变着我们的应用开发和部署方式,而Kubernetes(简称K8s)作为当前最流行的云原生容器编排平台,已经成为许多企业架构转型的关键。本文将带你从K8s的入门知识开始,逐步深入到实战应用,帮助你打造高效稳定的应用架构。
一、K8s基础知识
1.1 什么是K8s?
Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它允许用户定义和部署复杂的应用程序,并确保它们在多台计算机上高效运行。
1.2 K8s的核心概念
- Pod:K8s的最小部署单元,一组相关的容器。
- Node:K8s集群中的计算节点,可以是物理机或虚拟机。
- Master:K8s集群的管理节点,负责集群的调度、资源管理等。
- ReplicaSet:确保指定数量的Pod副本始终运行。
- Deployment:管理Pods、ReplicaSets、ReplicationControllers等资源,提供声明式更新。
- Service:定义了一个访问Pods的逻辑接口。
- Ingress:定义了外部访问集群的入口。
二、K8s安装与配置
2.1 安装Docker
在运行K8s之前,需要先安装Docker。以下是Docker的安装步骤:
# 1. 安装Docker引擎
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
# 2. 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*'')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2.2 安装K8s
以下是使用kubeadm安装K8s集群的步骤:
# 1. 安装kubeadm、kubelet和kubectl
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo systemctl start kubelet
sudo systemctl enable kubelet
# 2. 初始化Master节点
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 3. 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 4. 安装Pod网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
三、K8s实战应用
3.1 部署Nginx应用
以下是一个简单的Nginx应用部署示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
3.2 部署有状态应用
以下是一个有状态应用(MySQL)的部署示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "rootpassword"
volumeMounts:
- name: mysql-pv-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-pv-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
3.3 部署服务发现
以下是一个服务发现示例,使用Nginx代理访问部署的Nginx应用:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
四、总结
通过本文的学习,相信你已经对K8s云原生架构有了深入的了解。从入门到实战,我们通过安装K8s、部署应用和配置服务发现等步骤,打造了一个高效稳定的应用架构。在实际应用中,K8s还可以与各种开源技术相结合,实现更加复杂的功能。希望本文能为你带来帮助,祝你学习愉快!
