kubernetes 集群离线部署
本文主要阐述在生产环境不可连接互联网的情况下如何离线搭建K8S 集群。
1.离线安装包准备
- 下载kubelet,kubectl ,kubeadm 安装包
在可联网的linux 环境执行以下命令,查看可下载的kubelet版本
yum list kubelet --showduplicates | sort -r
以下载1.18.8 版本为例
yum install --downloadonly --downloaddir=/home/centos/k8s kubelet-1.18.8 kubeadm-1.18.8 kubectl-1.18.8
- 获取镜像列表
kubeadm config images list
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 镜像,下载示例
docker pull k8s.gcr.io/kube-apiserver:v1.18.8
保存镜像
docker save -o kube-apiserver.tar k8s.gcr.io/kube-apiserver:v1.18.8
镜像传输到离线环境
docker load -i kube-apiserver.tar
- 下载docker 安装包
下载离线安装包https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
或者使用命令下载rpm 包
yum install --downloadonly --downloaddir=./ docker-ce docker-ce-cli-y
- 下载docker 私有仓库register
1.在有外网环境的docker中下载镜像
docker pull registry:2
2.从image导出镜像
docker save -o registry.tar registry:2
3.上传registry.tar到离线服务器,导入
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
上传到指定服务器,安装命令
rpm -ivh *.rpm
docker info 查看docker信息
修改cgoupdriver为systemd与k8b保持一致,
vim /etc/docker/daemon.json
进行以下修改
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
启动docker
systemctl restart docker
设置开机启动
systemctl enabel docker
docker 仓库安装
启动register
docker run -d -v /registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2
修改k8s集群节点的dokcer daemon.json 支持https
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["10.209.68.12:5000"]
}
重新加载配置
systemctl daemon-reload
systemctl restart docker
安装K8S
环境准备
- 关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
- 设置时间同步
yum install ntpdate ‐y
ntpdate time.windows.com
- 关闭swap
swapoff -a #临时关闭
vim /etc/fstab #永久关闭
#注释掉swap这行
# /dev/mapper/centos‐swap swap swap defaults 0 0
systemctl reboot#重启生效
free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功
关闭selinux
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。例如:
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 本地安装包
yum localinstall *.rpm
初始化控制平面节点(mater)
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国内无法访问,这里指定阿里云镜像仓库地址。
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
输出的一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果你是 root
用户,则可以运行:
export KUBECONFIG=/etc/kubernetes/admin.conf
#查看kubectl是否能正常使用
kubectl get nodes
安装 Pod 网络附加组件(master)
每个集群只能安装一个 Pod 网络。
安装 Pod 网络后,您可以通过在 kubectl get pods --all-namespaces
输出中检查 CoreDNS Pod 是否 Running
来确认其是否正常运行。 一旦 CoreDNS Pod 启用并运行,你就可以继续加入节点。
安装POD network Flannel(DamonSet)
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
kubectl apply -f kube-flannel.yaml
如果您的网络无法正常工作或 CoreDNS 不在“运行中”状态,请查看kubeadm
的故障排除指南。
kubectl -n kube-system get pods -o wide #查看是否创建成功
加入节点(NODE执行)
NODE 节点也需要安装 kubeadm、kubelet 和 kubectl
kubeadm join 192.168.17.149:6443--token gfs8qb.shcvgzxrcflaw19m \ --discovery-token-ca-cert-hash sha256:a47db38d409c8135969aeee18b1371230dfabfd8fed860691b02f717543a8f85
相关文章
- 【K8S专栏】Kubernetes集群管理
- Kubernetes 集群高可用
- 2-Kubernetes入门之CentOS安装部署集群
- kubernetes | metrics-server部署
- 一线开发大牛教你如何使用Kubernetes部署分布式集群
- Prometheus监控实战系列二十:监控Kubernetes集群(下篇)
- RSA解读 | Kubernetes集群的攻与防
- Kubernetes集群仪表盘dashboard&Kuboard安装Demo
- Kubernetes Ingress控制器技术选型注意事项
- 如何使用Prometheus和Grafana监控多个Kubernetes集群
- kubernetes安装minio集群
- kubernetes安装zookeeper集群
- kubernetes helm安装pulsar集群
- kubernetes集群之微服务tomcat服务
- Centos7 单节点上安装kubernetes-dashboard过程详解架构师
- 使用 Graylog 和 Prometheus 监视 Kubernetes 集群
- 使用kubernetes创建容器一直处于ContainerCreating状态的原因查找与解决
- Kubernetes中部署tomcat与mysql集群教程