在云计算和容器技术飞速发展的今天,Kubernetes(简称K8s)已成为容器编排的事实标准。掌握K8s对于任何一名DevOps工程师或开发者来说都是一项重要的技能。本文将为您详细介绍K8s的部署全攻略,从基础知识到实操技巧,助您快速入门。
一、K8s基础知识
1. 什么是K8s?
Kubernetes是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。它允许您以声明性方式定义和管理容器化应用程序,简化了容器化应用程序的部署和维护过程。
2. K8s的核心概念
- Pod:K8s中的最小调度单位,可以包含一个或多个容器。
- ReplicaSet:一组Pods的集合,用于保持特定数量的Pod副本。
- Deployment:用于创建和管理Pods和ReplicaSet的对象。
- Service:定义Pods的访问方式,为Pods提供一个稳定的网络接口。
- Ingress:用于控制流量进入集群的方式。
- Node:K8s集群中的工作节点,运行Pods。
二、K8s部署环境搭建
1. 硬件要求
- 至少2个物理服务器或虚拟机
- 每个节点至少4核CPU和8GB内存
- 10GB以上的SSD存储空间
2. 操作系统要求
- Ubuntu 16.04+
- CentOS 7+
- Debian 9+
3. 安装Docker
在所有节点上安装Docker,作为容器运行时环境。
# 以Ubuntu 16.04为例
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker
4. 安装K8s组件
在所有节点上安装K8s的组件,如kubeadm、kubectl和kubelet。
# 以Ubuntu 16.04为例
sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
三、K8s集群搭建
1. 初始化主节点
在主节点上执行以下命令初始化K8s集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
初始化完成后,会输出如下信息:
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2. 配置kubectl
将admin.conf文件复制到普通用户目录下,并修改权限:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 安装网络插件
在集群中安装Flannel网络插件,以实现Pods之间的通信:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
四、K8s应用部署
1. 编写YAML文件
创建一个名为nginx-deployment.yaml的YAML文件,用于定义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
2. 应用部署
使用kubectl命令部署Nginx应用:
kubectl apply -f nginx-deployment.yaml
3. 查看应用状态
使用以下命令查看Nginx应用的部署状态:
kubectl get pods
五、K8s集群管理
1. 查看集群信息
使用以下命令查看K8s集群的详细信息:
kubectl cluster-info
2. 查看命名空间
使用以下命令查看K8s集群的命名空间:
kubectl get namespaces
3. 删除应用
使用以下命令删除Nginx应用:
kubectl delete -f nginx-deployment.yaml
六、K8s实操技巧
1. 节点亲和性
在部署应用时,可以通过配置Pod的亲和性,将Pod调度到特定的节点上。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "role"
operator: In
values:
- master
2. 容器资源限制
在部署应用时,可以为容器设置资源限制,防止资源耗尽导致的其他应用出现问题。
resources:
limits:
cpu: "1000m"
memory: "500Mi"
requests:
cpu: "500m"
memory: "250Mi"
3. 监控与日志
使用Prometheus和Grafana等工具进行K8s集群的监控和日志分析。
七、总结
通过本文的学习,您已经掌握了K8s部署的全攻略。从基础知识到实操技巧,相信您已经具备了在K8s集群中部署和管理应用的能力。在后续的学习过程中,请不断实践和总结,不断提升自己的技能水平。祝您在K8s的世界中一帆风顺!
