docker和k8s

一、简述

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
相关推荐
礁之31 分钟前
Fastdfs V6.12.1集群部署(arm/x86均可用)
docker·云原生·dfs
shelby_loo33 分钟前
在 Ubuntu 下通过 Docker 部署 MariaDB 服务器
服务器·ubuntu·docker
Onlooker-轩逸1 小时前
Docker安装与架构
docker·容器·架构
纷飞梦雪2 小时前
jenkins针对大文件进行拉取
kubernetes
老年DBA3 小时前
Kubernetes(k8s)安装详细过程
云原生·容器·kubernetes
TomcatLikeYou3 小时前
Centos7安装k8s集群
云原生·容器·kubernetes
roshy3 小时前
POD 存储、PV、PVC
docker·k8s·pod
Mitch3113 小时前
【漏洞复现】CVE-2022-45206 & CVE-2023-38905 SQL Injection
web安全·网络安全·docker·apache·jeecgboot
Karoku0663 小时前
【自动化部署】Ansible Playbook 基础应用
运维·网络·docker·容器·自动化·ansible·consul
satadriver3 小时前
docker安装和换源
docker