前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes 集群离线部署

kubernetes 集群离线部署

原创
作者头像
奶盖
发布2022-11-16 15:59:00
3K1
发布2022-11-16 15:59:00
举报
文章被收录于专栏:奶盖笔记奶盖笔记

本文主要阐述在生产环境不可连接互联网的情况下如何离线搭建K8S 集群。

1.离线安装包准备

  • 下载kubelet,kubectl ,kubeadm 安装包

在可联网的linux 环境执行以下命令,查看可下载的kubelet版本

代码语言:javascript
复制
yum list kubelet --showduplicates | sort -r    

以下载1.18.8 版本为例

代码语言:javascript
复制
yum install --downloadonly --downloaddir=/home/centos/k8s kubelet-1.18.8 kubeadm-1.18.8 kubectl-1.18.8

  • 获取镜像列表
代码语言:javascript
复制
kubeadm config images list
代码语言:javascript
复制
k8s.gcr.io/kube-apiserver:v1.18.8
k8s.gcr.io/kube-controller-manager:v1.18.8
k8s.gcr.io/kube-scheduler:v1.18.8
k8s.gcr.io/kube-proxy:v1.18.8
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

通过外部联网环境拉去docker 镜像,下载示例

代码语言:javascript
复制
docker pull k8s.gcr.io/kube-apiserver:v1.18.8

保存镜像

代码语言:javascript
复制
docker save -o  kube-apiserver.tar k8s.gcr.io/kube-apiserver:v1.18.8

镜像传输到离线环境

代码语言:javascript
复制
docker load -i kube-apiserver.tar

  • 下载docker 安装包

下载离线安装包https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

或者使用命令下载rpm 包

代码语言:javascript
复制
yum install --downloadonly --downloaddir=./  docker-ce docker-ce-cli-y

  • 下载docker 私有仓库register

1.在有外网环境的docker中下载镜像

代码语言:javascript
复制
docker pull registry:2

2.从image导出镜像

代码语言:javascript
复制
docker save -o registry.tar registry:2

3.上传registry.tar到离线服务器,导入

代码语言:javascript
复制
docker load -i registry.tar

2.离线包安装

docker 安装

docker-ce-cli-18.09.7-3.el7.x86_64.rpm

docker-ce-18.09.7-3.el7.x86_64.rpm

container-selinux-2.107-1.el7_6.noarch.rpm

containerd.io-1.2.2-3.el7.x86_64.rpm

上传到指定服务器,安装命令

代码语言:javascript
复制
rpm -ivh *.rpm

docker info 查看docker信息

修改cgoupdriver为systemd与k8b保持一致,

代码语言:javascript
复制
vim /etc/docker/daemon.json

进行以下修改

代码语言:javascript
复制
{

  "registry-mirrors": ["https://registry.docker-cn.com"],

  "exec-opts": ["native.cgroupdriver=systemd"]

}
代码语言:javascript
复制
systemctl  daemon-reload

启动docker

代码语言:javascript
复制
systemctl  restart docker

设置开机启动

代码语言:javascript
复制
systemctl enabel docker

docker 仓库安装

启动register

代码语言:javascript
复制
docker run -d -v /registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2

修改k8s集群节点的dokcer daemon.json 支持https

代码语言:javascript
复制
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries": ["10.209.68.12:5000"]
}

重新加载配置

代码语言:javascript
复制
systemctl  daemon-reload
代码语言:javascript
复制
systemctl  restart docker

安装K8S

环境准备

  • 关闭防火墙
代码语言:javascript
复制
systemctl disable firewalld.service
systemctl stop firewalld.service
  • 设置时间同步
代码语言:javascript
复制
yum install ntpdate ‐y 
ntpdate time.windows.com
  • 关闭swap
代码语言:javascript
复制
swapoff -a  #临时关闭
代码语言:javascript
复制
vim /etc/fstab   #永久关闭 

#注释掉swap这行

# /dev/mapper/centos‐swap swap swap defaults 0 0

systemctl reboot#重启生效

free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功

关闭selinux

代码语言:javascript
复制
sed ‐i "s/enforcing/disabled/" /etc/selinux/config  #永久关闭

允许 iptables 检查桥接流量

确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter

为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

代码语言:javascript
复制
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

安装 kubeadm、kubelet 和 kubectl 本地安装包

代码语言:javascript
复制
yum localinstall *.rpm

初始化控制平面节点(mater)

代码语言:javascript
复制
kubeadm init <args>

--kubernetes-version v1.18.8 指定版本
--apiserver-advertise-address 为通告给其它组件的IP,一般应为master节点的IP地址
--service-cidr 指定service网络,不能和node网络冲突
--pod-network-cidr 指定pod网络,不能和node网络、service网络冲突
--image-repository registry.aliyuncs.com/google_containers 指定镜像源,由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
代码语言:javascript
复制
kubeadm init --apiserver-advertise-address=192.168.17.149--image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.8--pod-network-cidr=10.10.0.0/16--service-cidr=10.20.0.0/16

要使非 root 用户可以运行 kubectl,请运行以下命令, 它们也是 kubeadm init 输出的一部分:

代码语言:javascript
复制
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

或者,如果你是 root 用户,则可以运行:

代码语言:javascript
复制
export KUBECONFIG=/etc/kubernetes/admin.conf

#查看kubectl是否能正常使用

代码语言:javascript
复制
kubectl get nodes

安装 Pod 网络附加组件(master)

每个集群只能安装一个 Pod 网络。

安装 Pod 网络后,您可以通过在 kubectl get pods --all-namespaces 输出中检查 CoreDNS Pod 是否 Running 来确认其是否正常运行。 一旦 CoreDNS Pod 启用并运行,你就可以继续加入节点。

安装POD network Flannel(DamonSet)

代码语言:javascript
复制
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

复制

修改kube-flannel.yml

更改 128行的网络配置,要和 pod-network-cidr保持一致

cat kube-flannel.yml | grep Network

代码语言:javascript
复制
kubectl  apply -f kube-flannel.yaml

如果您的网络无法正常工作或 CoreDNS 不在“运行中”状态,请查看kubeadm故障排除指南

代码语言:javascript
复制
kubectl -n kube-system get pods -o wide   #查看是否创建成功

加入节点(NODE执行)

NODE 节点也需要安装 kubeadm、kubelet 和 kubectl

代码语言:javascript
复制
kubeadm join 192.168.17.149:6443--token gfs8qb.shcvgzxrcflaw19m \     --discovery-token-ca-cert-hash sha256:a47db38d409c8135969aeee18b1371230dfabfd8fed860691b02f717543a8f85 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.离线安装包准备
  • 2.离线包安装
    • docker 安装
      • docker 仓库安装
        • 安装K8S
          • 环境准备
          • 关闭selinux
          • 允许 iptables 检查桥接流量
          • 安装 kubeadm、kubelet 和 kubectl 本地安装包
          • 初始化控制平面节点(mater)
          • 安装 Pod 网络附加组件(master)
          • 加入节点(NODE执行)
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档