kubernetes + docker

环境准备

bridge(桥接) 是 Linux 系统中的一种虚拟网络设备,它充当一个虚拟的交换机,为集群内的容器提供网络通信功能,容器就可以通过这个 bridge 与其他容器或外部网络通信了。
# 开启bridge网桥过滤
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

参数解释:
net.bridge.bridge-nf-call-ip6tables = 1  //对网桥上的IPv6数据包通过iptables处理
net.bridge.bridge-nf-call-iptables = 1   //对网桥上的IPv4数据包通过iptables处理
net.ipv4.ip_forward = 1                       //开启IPv4路由转发,来实现集群中的容器与外部网络的通信

由于开启bridge功能,需要加载br_netfilter模块来允许在bridge设备上的数据包经过iptables防火墙处理
modprobe br_netfilter && lsmod | grep br_netfilter

#会输出以下内容
br_netfilter           22256  0
bridge                151336  1 br_netfilter
命令解释:
modprobe         //命令可以加载内核模块
br_netfilter            //模块模块允许在bridge设备上的数据包经过iptables防火墙处理

加载配置文件,使上述配置生效
sysctl -p /etc/sysctl.d/k8s.conf

# 关闭SWAP交换分区
# 临时关闭
swapoff -a
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

一、部署 docker + kubernetes

在每个节点(masternode节点)上安装Docker、kubelet、kubeadm和kubectl

1、docker

# 安装 yum-utils 软件包,从而使系统能够使用一系列增强的 YUM 包管理工具来更好地管理软件包、清理缓存
yum install -y yum-utils

# 向系统中添加 Docker 社区版的官方软件仓库配置,以便使用 YUM 包管理工具从 Docker 官方源下载和安装 Docker 软件
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 通过 YUM 包管理工具自动安装 Docker 社区版及其相关组件
yum install docker-ce docker-ce-cli containerd.io -y

# 设置 Docker 开机自启
systemctl enable docker

# 配置/etc/containerd/config.toml,配置 Containerd 容器运行时的各种参数
--------------------------------------------------------------------
#disabled_plugins = ["cri"]

[grpc]
  address = "/run/containerd/containerd.sock"
  uid = 0
  gid = 0

[debug]
  address = "/run/containerd/debug.sock"
  uid = 0
  gid = 0
  level = "info"
--------------------------------------------------------------------

# 启动 Docker 服务
systemctl start docker
辅助命令
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 查看防火墙状态
sudo firewall-cmd --state

#列出正在运行的 Docker 容器
docker ps

#列出本地的 Docker 镜像
docker images

#停止并删除容器(<container_name_or_id> 是你的Registry容器的名称或ID)
docker stop <container_name_or_id>
docker rm <container_name_or_id>

#删除镜像(镜像有多个版本加tag)
docker rmi <image_name>:<tag>
docker rmi <image_name>

#解压缩和解包 tar 归档文件
#假设你有一个名为 archive.tar 的 tar 归档文件,你可以使用以下命令解包它:
tar -xvf archive.tar

tar:执行 tar 命令。
-x:选项表示解压缩和提取文件
-v:显示操作过程中的详细信息。
-f:选项后紧跟着的参数指定要操作的归档文件名

#加载镜像到本地 Docker 环境
#假设你有一个名为 my_images.tar 的 Docker 归档文件,其中包含了一些 Docker 镜像。你可以使用以下命令将这些镜像加载到你的 Docker 环境中:
docker load -i my_images.tar

2、kubernetes

# 创建一个 Kubernetes YUM 仓库配置文件,将阿里云的 Kubernetes 软件仓库添加到系统中。这样,你就可以使用 YUM 包管理工具从该仓库中下载和安装 Kubernetes 相关的软件包。通过运行这个命令,你可以为系统启用 Kubernetes 的 YUM 仓库,方便安装、升级和管理 Kubernetes 软件。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 使用 YUM 包管理工具自动安装 Kubernetes 相关组件的指定版本(1.19.3)在系统中,以便准备好在你的系统上部署和管理 Kubernetes 集群
# kubeadm:用于初始化和管理 Kubernetes 集群的命令行工具。
# kubectl:用于与 Kubernetes 集群进行交互的命令行工具。
# kubelet:Kubernetes 集群中每个节点上运行的系统进程,负责管理容器的生命周期。
yum install -y kubeadm-1.19.3-0 kubectl-1.19.3-0  kubelet-1.19.3-0

# 设置 kubelet 开机自启
# kubelet 是 Kubernetes 集群中每个节点上运行的系统进程,负责管理容器的生命周期,因此需要在开机时自动启动,以确保 Kubernetes 集群的正常运行。
# kubeadm 和 kubectl 不需要在开机时自动启动。它们是命令行工具,用于在初始化 Kubernetes 集群、管理集群配置和与集群进行交互。这些工具通常由管理员手动运行,不需要在每次开机时自动启动。
systemctl enable kubelet

# 禁用swap(编辑 /etc/fstab 文件,找到包含 swap 的行(如果有的话),并在行首添加 # 来注释掉该行)
# swap 是指计算机系统中用于虚拟内存管理的一种技术,通常在物理内存(RAM)不足时,将一部分数据暂时交换到硬盘上的一块称为 swap 分区或 swap 文件的存储空间中,以释放物理内存供其他程序使用。
# 在容器化环境中,特别是使用 Kubernetes 管理容器的集群中,禁用 swap 是推荐的做法。Kubernetes 和容器通常需要严格的内存管理,而 swap 的使用可能会导致不可预测的行为。因此,禁用 swap 可以确保容器在物理内存不足时更可靠地受限而不会频繁地使用 swap。
swapoff -a

# 在 Kubernetes 集群中初始化(只在 Master 节点执行)一个新的 Kubernetes 控制平面
# --apiserver-advertise-address=10.0.0.4:这个参数用于指定 Kubernetes API 服务器(API Server)公开的 IP 地址。这里指定为 10.0.0.4,表示 API Server 将会使用这个 IP 地址进行公开。
kubeadm init --apiserver-advertise-address=10.0.0.4 --kubernetes-version v1.19.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

# 初始化集群后,按照输出信息中的指示,运行以下命令来设置Kubernetes配置文件:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 将每个节点(在 Node 节点执行)加入到 Kubernetes 集群中(kubeadm init 执行之后会输入,直接复制即可)
kubeadm join 192.168.3.30:6443 --token i8q481.asaukyof1abw5j8n     --discovery-token-ca-cert-hash sha256:b4af288c70e6c7cb9054271696c9ee41123d4da48cce5b2feaabba43ba0f481f
# 在 Node 节点执行
iptables-restore < /root/iptablesnode.v4

# 在 Mster 节点执行
iptables-restore < /root/iptablesmaster.v4

# Master节点执行,在 Kubernetes 集群中安装 Tigera 和 Calico 组件,用于网络和安全策略的管理。
kubectl create -f tigera-operator.yaml
kubectl apply -f calico-typha.yaml

# 重启 kubelet,在 Master 节点中查看 Node 节点是否已经加入集群
systemctl restart kubelet
kubectl get nodes

# 在 Kubernetes 集群中部署 Kubernetes Dashboard,这是一个用于管理和监控集群的图形用户界面
kubectl create -f recommended.yaml

# 给 kubernetes-dashboard 赋值权限
kubectl create clusterrolebinding serviceaccount-cluster-admin --clusterrole=cluster-admin --user=system:serviceaccount:default:default

# 获取 kubernetes-dashboard 登录token,有过期时间,每次登录都需要重新获取
kubectl describe secret $(kubectl get secret -n kubernetes-dashboard | grep dashboard-admin | awk '{print $1}')
修改node节点主机名
# 获取集群所有节点信息
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   3d1h   v1.19.3
node1    Ready    <none>   3d     v1.19.3
node222    Ready    <none>   3d     v1.19.3

# 在 master 节点删除想要修改主机名的子节点(比如node222)
kubectl delete node node222

# 将当前节点还原到未初始化的状态,从而清除节点上与 Kubernetes 相关的配置和数据
kubeadm reset
# 在当前终端会话中切换到 root 用户的身份
su root

# 修改子节点的主机名为 node2
hostnamectl set-hostname node2

# 在 maste 节点执行,获取子节点加入集群令牌,将输出命令直接在 node 节点执行
kubeadm token create --print-join-command

# 在被删除的子节点,执行加入集群的命令
kubeadm join 192.168.3.30:6443 --token 0agh2z.2run9cjqd5q2m95j     --discovery-token-ca-cert-hash sha256:b4af288c70e6c7cb9054271696c9ee41123d4da48cce5b2feaabba43ba0f481f

# 在 mster 节点进行验证
kubectl get nodes
辅助命令
# 在 kubernetes-dashboard 命名空间中获取 Pod 和 Service 资源的信息
kubectl get pod,svc -o wide -n kubernetes-dashboard

# 用于在 Kubernetes 集群中创建一个令牌(Token),该令牌可用于让其他节点加入集群。
kubeadm token create --print-join-command

# 关机重启
shutdown -r now

# 重启 kubelet
systemctl restart kubelet

二、部署 rabbitmq

# 在 CentOS 7 上安装 unixODBC 软件包,它提供了一个统一的接口来访问不同的数据库管理系统
yum install -y unixODBC
# 下载指定版本的 openssl-libs 软件包
wget https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/openssl-libs-1.0.2k-19.el7.x86_64.rpm
# 使用 rpm 工具安装 openssl-libs 软件包,并使用 --force 选项强制安装
rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force
# 下载指定版本的 Erlang 软件包
wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_25.0.3-1~centos~7_amd64.rpm
# 使用 rpm 工具来升级或安装下载的 Erlang 软件包
rpm -Uvh esl-erlang_25.0.3-1~centos~7_amd64.rpm
# 使用 yum 包管理器安装 Erlang 语言的软件包
yum install -y erlang
# 使用 yum 包管理器安装 socat 软件包,它是一个多功能的网络工具,可以用于在两个数据流之间建立连接
yum install -y socat
# 从 GitHub 下载 RabbitMQ 3.11.11 版本的软件包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.11/rabbitmq-server-3.11.11-1.el8.noarch.rpm
# 使用 rpm 工具来安装下载的 RabbitMQ 软件包
rpm -Uvh rabbitmq-server-3.11.11-1.el8.noarch.rpm

修改hosts文件/etc/hosts
--------------------------------------------------------------------
192.168.3.100 master
192.168.3.101 node1
192.168.3.102 node2
--------------------------------------------------------------------

# 设置 rabbitmq 开启自启
systemctl enable rabbitmq-server
# 启动 rabbitmq
systemctl start rabbitmq-server

--- 安装 rabbitmq 管理页面,端口号是15672---
# 启用 RabbitMQ 管理插件,它允许您通过 Web 界面管理和监控 RabbitMQ 服务器
rabbitmq-plugins enable rabbitmq_management
# 向 RabbitMQ 添加一个名为 "admin" 的用户,密码也设置为 "admin",可以根据需要修改用户名和密码
rabbitmqctl add_user admin admin
# 将 "admin" 用户标记为 "administrator",这样该用户就具有管理员权限,可以管理 RabbitMQ 服务器的配置和权限
rabbitmqctl set_user_tags admin administrator
# 为 "admin" 用户设置权限,允许其对 "/" 虚拟主机中的所有资源拥有配置、写入和读取的权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
# 启用 RabbitMQ 的 Web MQTT 插件
rabbitmq-plugins enable rabbitmq_web_mqtt

三、部署 redis

# 安装 Remi 存储库,该存储库提供了许多流行的软件包的更新版本,包括 Redis
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# 使用 Remi 存储库来安装 Redis 软件包,--enablerepo=remi 选项用于启用 Remi 存储库,并使用 yum 包管理器自动安装 Redis 软件包
yum --enablerepo=remi install redis -y

修改redis配置文件/etc/redis.conf
--------------------------------------------------------------------
bind 192.168.3.100
requirepass 123456
cluster-enabled yes
--------------------------------------------------------------------
# 设置 redis 开机自启
systemctl enable redis
# 启动 redis
systemctl start redis

四、部署 nginx

# 安装 yum-utils 软件包,这是一组工具,可以帮助您管理 yum 包管理器的存储库和插件
yum install -y yum-utils
# 使用 cat 命令将一段文本添加到 /etc/yum.repos.d/nginx.repo 文件中。这段文本定义了两个 Nginx 存储库(nginx-stable 和 `nginx-mainline),并配置了存储库的详细信息,包括存储库的基本 URL、GPG 校验和存储库的启用状态
cat <<EOF > /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/7/x86_64/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
# 安装 Nginx 软件包
yum install nginx -y
# 启用 Nginx 服务的自启动
systemctl enable nginx
# 启动 Nginx 服务
systemctl start nginx
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容