一、简述
1.1 docker
是一个开源的应用容器引擎,负责创建和管理容器,将应用程序及其依赖打包到可移植的容器中,实现应用容器化。
Docker容器使用沙箱机制,相互之间不会有任何接口;
Docker的核心概念包括镜像、容器和仓库;
镜像类似于一个模板,容器是基于这个模板创建的运行实例,而仓库则用于存储这些镜像。
1.2 k8s
Kubernetes(K8s)则负责自动化部署、自动扩缩容、以及维护容器集群。它利用强大的容器编排能力,可以调度和管理多种容器,包括Docker容器 ,确保应用的高可用性和可扩展性
核心功能包括自动化部署、负载均衡、服务发现、自动伸缩、滚动更新等
1.3 联系
Docker通常被用于构建和推送容器镜像到仓库,而Kubernetes则负责管理和协调这些容器在生产环境中的生命周期和行为;
二、部署
2.1 docker安装
2.1.1 环境准备
确保服务器满足前置条件,如CPU、内存、硬盘等配置,并配置好网络互通和主机名映射
例如:
1、至少20G磁盘空间、2核CPU和2G内存;
2、操作系统推荐使用Ubuntu或CentOS;
3、所有服务器之间网络互通,并具有root或sudo权限;
4、确保所有服务器之间网络互通,并配置好主机名和hosts文件
2.1.2 安装
在每个集群节点上安装Docker,并进行必要的配置,包括设置镜像加速器和配置Docker守护程序的网络。
1、如果之前安装过Docker,需要先卸载旧版本
bash
# 卸载Docker及相关组件
sudo apt-get remove docker \ docker-engine \ http:// docker.io
2、确保你的系统是最新的,并安装一些必要的依赖工具
bash
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
命令解释:
sudo yum update -y
sudo:以超级用户权限执行命令
yum:是一个基于RPM的包管理器,用于安装、更新和删除软件包
update:更新系统上的所有软件包到最新版本
-y:表示自动回答"yes",避免在更新过程中需要手动确认
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum install:这是 yum 命令的基本用法,用于安装软件包
-y:告诉 yum 在安装过程中自动回答所有提示为yes
yum-utils:这是一个包含了一些额外的 yum 工具和实用程序的软件包
device-mapper-persistent-data:这是一个提供设备映射器的持久数据支持的软件包,通常用于高级存储管理和 LVM(逻辑卷管理)。
lvm2:这是逻辑卷管理器(LVM)的第二个版本,提供对逻辑卷的高级管理功能,包括创建、删除、调整大小和快照等。
3、安装Docker CE
bash
# 安装
sudo yum install docker-ce docker-ce-cli containerd.io -y
# 启动
sudo systemctl start docker
# 设置开机自动启
sudo systemctl enable docker
# 验证安装
docker --version
安装命令安装了三个包:
docker-ce:Docker社区版
docker-ce-cli:Docker命令行界面
containerd.io:一个便捷的容器运行时与容器 images 的管理
4、镜像加速(可选)
为了提高Docker镜像的下载速度,可以配置Docker的镜像加速
bash
# 用于创建目录,其中-p参数表示如果目录的上级目录不存在,则一并创建上级目录
sudo mkdir -p /etc/docker
# 命令会创建或编辑daemon.json文件;并指定镜像加速器地址;
# <your-url>替换为你选择的镜像加速器的URL
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<your-url>"]
}
EOF
# 重新加载systemd守护进程配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker
常用的镜像加速器:
腾讯云镜像加速器:https://mirror.ccs.tencentyun.com
Docker官方镜像(中国区):https://registry.docker-cn.com
阿里云镜像加速器:https://xxxxxx.mirror.aliyuncs.com(需要登录阿里云控制台获取具体地址)
2.2 k8s安装
2.2.1 环境准备
1、安装必要的软件包,如yum-utils、device-mapper-persistent-data和lvm2;例如:上面docker安装的依赖工具
2、关闭防火墙和swap
bash
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 禁用Selinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 临时关闭swap
sudo swapoff -a
# 永久关闭swap
sudo sed -i '/ swap / s/\(.*\)$/#\1/g' /etc/fstab
sudo sed -i '/ swap / s/\(.*\)$/#\1/g' /etc/fstab
sudo sed -i 以超级用户权限直接编辑文本文件中的内容;
该命令就是找/etc/fstab文件中所有包含"swap"的行,并在这些行的开头添加"#"符号,从而将这些行注释掉,阻止系统在启动时自动挂载swap分区。
3、时间同步(确保每个节点的时间相同)
bash
# 启动并启用chronyd服务
systemctl start chronyd && systemctl enable chronyd
4、设置主机名和配置hosts文件,确保每个节点有唯一的主机名和IP地址映射
根据规划设置主机名,在每个节点上各自执行hostnamectl set-hostname <hostname>
例如:
hostnamectl set-hostname k8s_master
hostnamectl set-hostname k8s_node01
hostnamectl set-hostname k8s_node02
在主节点上执行:
bash
cat >> /etc/hosts << EOF
11.16.5.190 k8s_master
11.16.5.191 k8s_node01
11.16.5.192 k8s_node02
EOF
2.2.2 安装
1、添加Kubernetes仓库
bash
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
2、安装kubelet、kubeadm和kubectl
bash
sudo yum install -y kubelet kubeadm kubectl
3、启动并启用Kubelet服务
bash
systemctl start kubelet && systemctl enable kubelet
4、k8s初始化主节点(IP段更具需要更换);注意输出的kubeadm join命令,在其他服务器上加入 Kubernetes 群集时需要用到,复制此命令以供之后使用。
bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
5、配置Kubectl
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
命令详解:
mkdir -p $ HOME/.kube
创建用户主目录下的.kube目录,用于存放Kubernetes的配置文件。
sudo cp -i /etc/kubernetes/admin.conf $ HOME/.kube/config
将系统级别的Kubernetes配置文件admin.conf复制到用户主目录下的.kube目录,并更名为config
sudo chown (id -u):(id -g) $HOME/.kube/config
$ (id -u):这是一个命令替换,id -u 返回当前用户的ID,这里用它来获取当前用户的UID,并将其作为chown命令的参数,指定文件的新所有者。
$ (id -g):id -g 返回当前用户的组ID。这里用它来获取当前用户的GID,并将其作为chown命令的参数,指定文件的新所属组。
$ HOME/.kube/config:这是Kubernetes的配置文件路径。 $ HOME 代表当前用户的家目录,.kube/config 是Kubernetes配置的默认位置。
6、加入Node节点到集群;该命令在初始化主节点后会输出
bash
sudo kubeadm join <ip>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
如果初始化完后没有保存该命令,可以手动查询:
<ip>:<port> 主节点ip端口
<token>用于加入节点的令牌,可以在主节点上通过kubeadm token create命令生成。
<hash>用于验证令牌的CA证书哈希值,可以在主节点上通过kubeadm token list命令获取。
7、在主节点验证集群
bash
kubectl get nodes
如果所有节点都显示为Ready状态,则集群安装成功
三、使用
1、创建与管理Docker镜像
编写Dockerfile:使用Dockerfile定义应用程序的环境和依赖
构建Docker镜像:通过Docker构建命令,利用Dockerfile创建Docker镜像
2、推送镜像
可以通过查看/etc/docker/daemon.json配置文件来查看Docker配置的镜像仓库地址
3、编写Kubernetes清单文件
deployment.yaml文件示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: appName
spec:
#定义了3个副本
replicas: 3
selector:
matchLabels:
app: appName
template:
metadata:
labels:
app: appName
spec:
containers:
- name: appName
#使用appName:latest 镜像
image: appName:latest
ports:
- containerPort: 80
service.yaml文件示例:
apiVersion: v1
kind: Service
metadata:
name: appName-service
spec:
selector:
app: appName
ports:
- port: 80
targetPort: 80
type: LoadBalancer
4、使用以下命令创建上述资源:
bash
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml