本文主要阐述在生产环境不可连接互联网的情况下如何离线搭建K8S 集群。
在可联网的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
下载离线安装包https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
或者使用命令下载rpm 包
yum install --downloadonly --downloaddir=./ docker-ce docker-ce-cli-y
1.在有外网环境的docker中下载镜像
docker pull registry:2
2.从image导出镜像
docker save -o registry.tar registry:2
3.上传registry.tar到离线服务器,导入
docker load -i registry.tar
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
启动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
systemctl disable firewalld.service
systemctl stop firewalld.service
yum install ntpdate ‐y
ntpdate time.windows.com
swapoff -a #临时关闭
vim /etc/fstab #永久关闭
#注释掉swap这行
# /dev/mapper/centos‐swap swap swap defaults 0 0
systemctl reboot#重启生效
free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功
sed ‐i "s/enforcing/disabled/" /etc/selinux/config #永久关闭
确保 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
yum localinstall *.rpm
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 网络。
安装 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 节点也需要安装 kubeadm、kubelet 和 kubectl
kubeadm join 192.168.17.149:6443--token gfs8qb.shcvgzxrcflaw19m \ --discovery-token-ca-cert-hash sha256:a47db38d409c8135969aeee18b1371230dfabfd8fed860691b02f717543a8f85
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。