写点什么

k8s+Docker 部署方法

作者:Java你猿哥
  • 2023-05-11
    湖南
  • 本文字数:2611 字

    阅读完需:约 9 分钟

k8s+Docker部署方法

前言

k8s 宣布弃用 Docker?到底弃用了什么


首先,并不是弃用 Docker 容器,想要部署 k8s 和 Docker 容器环境的小伙伴完全不用担心!Docker 镜像容器依然可以正常被调用,唯一的区别就是最新版 k8s 会绕过 Docker 直接调用其内部的 containerd

本文使用的部署环境

至少一个 master,2 个 slave。你可以用虚拟机搞,也可以花钱买服务器,反正至少启三个来用。


环境配置的小 tips

如果你也想只用虚拟机玩玩,那么我们可以去官网或一些学校镜像站下载 iso 文件来安装

指路!

  1. wiki.centos.org/Download 官网的历史版本网页,提供 iso 下载

  2. mirrors.bupt.edu.cn/centos/7/is… 打个广告,北京邮电大学镜像站的 centos 7

本文使用的版本号

Docker 安装及配置

以下配置需要在主节点和所有从节点执行!\color{red}\textbf {以下配置需要在主节点和所有从节点执行!}以下配置需要在主节点和所有从节点执行!

配置仓库

这一步是为了拉取 docker 时速度快点,用的是阿里云的 centOS 7 源。


需要注意的是,Docker 版本务必和 k8s 支持的版本对应一下。本文用的是 k8s 1.23.0,安装的时候如果 Docker 不是 20 以下的会报警告(虽然可能没什么事不用管,但还是选好版本再说吧)


我们输入如下指令,来配置阿里云 yum 仓库,并使其生效:

cd /etc/yum.repos.dmv CentOS-Base.repo CentOS-Base.repo.backupwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum alean allyum makecache
复制代码


为 linux 安装指定版本 docker

我们可以使用如下指令查看我们的 yum 仓库有什么 docker 可装。我选择的是 20.10.0.3 这个版本。

yum list docker-ce --showduplicates | sort -ryum install -y docker-ce-20.10.0-3.el7
复制代码



docker 配置

我们首先启动 Docker:

systemctl start docker
复制代码

这时/etc/docker 会自动生成。我们需要进行一些自定义配置,设置阿里云源并且修改 docker 管理系统 cgroup 的方式为 systemd(和 k8s 一致才能正常安装启动 k8s)

vi /etc/docker/daemon.json########## 以下是文件内的具体内容 ###########{  "registry-mirrors": ["<这里,各位可以自行注册登录阿里云容器镜像服务,获得加速源镜像url>"],  "exec-opts": ["native.cgroupdriver=systemd"]}
########## 随后我们重启docker ###########systemctl restart docker
复制代码

这里附上阿里云镜像服务网址:

cr.console.aliyun.com/cn-hangzhou…


k8s 配置及安装

安装前配置


以下配置需要在主节点和所有从节点执行!\color{red}\textbf {以下配置需要在主节点和所有从节点执行!}以下配置需要在主节点和所有从节点执行!


安装前的配置主要需要实现如下几件事:

  1. 关闭防火墙,设置网络允许接收任意来源的请求

  2. 关闭 selinux,关闭 swap,并设置开机自动关闭

  3. 在 hosts 文件配置主从节点 ip

  4. 配置 k8s 的路由设置、镜像源


我们依次输入如下代码(具体多少个从节点视各位具体情况而定):

点击 展开/收起 代码块

iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld
cat >>/etc/hosts<<EOF <你的主节点ip> k8s-master<你的从节点ip1> k8s-slave1<你的从节点ip2> k8s-slave2<你的从节点ip3> k8s-slave3<你的从节点ip4> k8s-slave4EOF
cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF
cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
复制代码

安装 k8s

版本视情况而定。我选择 k8s v1.23.0:

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
复制代码

主节点配置

以下操作只在主节点进行!\color{red}\textbf {以下操作只在主节点进行!}以下操作只在主节点进行!

利用 kubeadm 生成默认配置的 yaml 文件,并且需要改一下。我们首先把默认配置生成出来:

kubeadm config print init-defaults > kubeadm.yaml
复制代码

随后,分别进行如下改动

######### :11,修改 #########localAPIEndpoint:  advertiseAddress: <这里换成master的地址>  ######### :30,修改 #########imageRepository: registry.aliyuncs.com/google_containers
######### :33,新增podSubnet这一行 #########networking: podSubnet: 10.244.0.0/16
复制代码

主节点启动

kubeadm image pull --config kubeadm.yamlkubeadm init --config kubeadm.yaml        
复制代码

我记录了当时启动完后的结果,这里最后两行告知了如何让从节点加入集群,我们只需要将这个输入到从节点那就行:


网络插件安装

这一步很重要,不安装网络插件的话 k8s 默认是无法跟从节点通信的。我选择的产品是 calico。

首先进入 calico 官方文档查看 calico 支持的 k8s 版本。我查看的是 calico 3.23,对应的软件要求可以在 calico v3.23 System Reauirements 里查看到。


输入如下命令部署 calico:

wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificatekubectl apply -f calico.yaml# 查看以下部署情况,一般运行calico后要过一会儿,会发现所有节点都将处于Ready状态,现在可以正常进行集群的通信了!kubectl get pod -n kube-system | grep calicokubectl get nodes
复制代码


新的从节点如何加入集群

假如我们未来创建了新的虚拟机,如何加入已经启动了的集群呢?

在 master 节点输入如下指令,将得到的结果输入新的从节点即可:

kubeadm token create --print-join-command
复制代码

如何关闭并驱逐从节点

这个其实严格执行的话挺麻烦的,以 slave1 为例,我们需要依次输入如下指令:

# 把slave1的资源驱赶到其他节点kubectl drain k8s-slave1 --ignore-daemonsets# 标记slave1为不可调度kubectl uncordon k8s-slave1# 从集群删除slave1kubectl delete node k8s-slave1
复制代码

主节点如何停止

kubectl drain node --ignore-daemonsets --delete-local-data --force
复制代码

主节点如何删除服务?

比如我们部署了一个 test-nginx 服务,但是想把它删了,释放其容器资源

kubectl get pods | grep test-nginx | awk '{print $1}' | xargs kubectl delete pod
复制代码


用户头像

Java你猿哥

关注

一只在编程路上渐行渐远的程序猿 2023-03-09 加入

关注我,了解更多Java、架构、Spring等知识

评论

发布
暂无评论
k8s+Docker部署方法_Java_Java你猿哥_InfoQ写作社区