Kubeadm集群部署k8s
Kubeadm集群部署k8s
一:部署环境
二:部署Kubernetes
三:master节点初始化
四:Node加入master
一:部署环境
实验环境: vmware 干净的centos7
k8s-master-0 192.168.10.124
k8s-node-0 192.168.10.131
k8s-node-1 192.168.10.132
k8s-node-2 192.168.10.133
确保yum可用
确保hosts配置一致
确保节点之间可以ssh免密登录
在k8s kubeadm方式安装的官方文档中就提到需要注意以下几点:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
实验准备:
*所有节点selinux关闭
setenforce 0 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 永久关闭
*所有防火墙关闭
systemctl stop firewalld && systemctl disable firewalld
*所有节点swap关闭
swapoff -a 临时关闭
sed -i 's/.*swap.*/#&/' /etc/fstab 永久关闭
所有节点安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce
stemctl start docker
systemctl enable docker
所有节点安装kubeadm和kubelet
[root@k8s-master-0 ~]# cat >> /etc/yum.repos.d/kubernetes.repo <<eof
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
eof
yum -y install kubeadm-1.19.7 kubelet-1.19.7 kubectl-1.19.7 ipvsadm
##需要指定版本,默认是下载最新的版本,如果版本比你使用的群集组件版本高,就会初始化失败;如果安装失败加上 --nogpgcheck 参数
node节点不需要安装kubectl,kubectl是一个agent读取kubeconfig访问api-server来操作集群,node节点一般不需要
所有节点获取docker的cgroups
DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d':' -f2)
echo $DOCKER_CGROUPS
所有节点配置kubelet的cgroups
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
EOF
所有节点加载内核
modprobe br_netfilter
所有节点修改内核参数
cat >> /etc/sysctl.conf <<eof
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
eof
sysctl -p
检查内核模块是否加载成功
lsmod | grep ip
kubelet --version
kubeadm version
二:部署Kubernetes
下载各个组件
K8S_VERSION=v1.19.7
ETCD_VERSION=3.4.13-0
DASHBOARD_VERSION=v1.8.3
FLANNEL_VERSION=v0.10.0-amd64
DNS_VERSION=1.7.0
PAUSE_VERSION=3.2docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION k8s.gcr.io/kube-apiserver:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION k8s.gcr.io/kube-controller-manager:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION k8s.gcr.io/kube-scheduler:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
也可以写成一个脚本来运行,2021年11月04日,实验失败会报错,后面只能一行行的复制执行
cat >> kubernetes.sh << eof
#!/bin/bash
K8S_VERSION=v1.19.7
ETCD_VERSION=3.4.13-0
DASHBOARD_VERSION=v1.8.3
FLANNEL_VERSION=v0.10.0-amd64
DNS_VERSION=1.7.0
PAUSE_VERSION=3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION k8s.gcr.io/kube-apiserver:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION k8s.gcr.io/kube-controller-manager:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION k8s.gcr.io/kube-scheduler:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
eof
bash kubernetes.sh
invalid reference format
Error parsing reference: "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:" is not a valid repository/tag: invalid reference format
启动kubelet
systemctl enable kubelet
systemctl start kubelet
三:master节点初始化
3.1 命令行初始化方式
kubeadm init --kubernetes-version=v1.19.7 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.19.7
kubeadm init --kubernetes-version=v1.19.7 --pod-network-cidr=192.168.0.0/16 --service-cidr=172.10.0.0/16 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.19.7
# --service-cidr:指定service网段
# --pod-network-cidr:指定K8S POD网段,不同的网络插件默认网段不一样
# --iamge-repository:指定国内镜像仓库地址
# --kuberntes-version 1.19.7:指定需要的版本
# --ignore-preflight-errors:忽略因为系统配置SWAP而产生的错误
#重置初始化状态
kubeadm reset
3.2配置文件初始化方式
配置文件需要添加pod网段等信息
kubeadm config print init-defaults > kubeadm-config.yaml
W1104 12:03:33.340082 9775 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io] |
kubeadm init --config=kubeadm-config.yaml
2021.11.04, 暂时解决不了,先用命令行初始化方式的方式学习下去
复制配置文件到用户HOME目录
root用户可以直接用下面的命令
export KUBECONFIG=/etc/kubernetes/admin.conf
非root用户执行下面命令复制配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
验证K8S集群服务状态,看到是NotReady状态,这是因为还没有配置CNI容器网络接口(Container Network Interface),CNI标准要求节点与节点网络互通、节点与容器之间网络互通、容器与容器之间网络互通。
kubectl get nodes
K8S支持多种CNI,而从1.18开始推荐使用calico而不再是flannel,Calico 是一种容器之间互通的网络方案。在虚拟化平台中,比如 OpenStack、Docker 等都需要实现 workloads 之间互连,但同时也需要对容器做隔离控制,就像在 Internet 中的服务仅开放80端口、公有云的多租户一样,提供隔离和管控机制。而在多数的虚拟化平台实现中,通常都使用二层隔离技术来实现容器的网络,这些二层的技术有一些弊端,比如需要依赖 VLAN、bridge 和隧道等技术,其中 bridge 带来了复杂性,vlan 隔离和 tunnel 隧道则消耗更多的资源并对物理环境有要求,随着网络规模的增大,整体会变得越加复杂。我们尝试把 Host 当作 Internet 中的路由器,同样使用 BGP 同步路由,并使用 iptables 来做安全访问策略,最终设计出了 Calico 方案。
(如果还需要flannel的话通过https://github.com/coreos/flannel页面下方的Deploying flannel manually可以找到一键部署的命令)。
calico网页上提供了安装方式(https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises)运行完成后等一会儿,然后运行docker images命令可以看到CNI的镜像
#cacico安装方法
wget --no-check-certificate https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml
#flannel安装方法
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看kube-system这个名称空间下的pods信息,K8S组件默认都在该名称空间下。验证flannel镜像是否拉取成功以及node状态是否正常,都没问题的话Master节点就安装完成了
#查看所有namespace
kubectl get ns
#查看指定namespace下的pods
kubectl get pods -n kube-system
#查看状态是否为Ready
kubectl get node
四:Node加入master
注意:
由于kubeadm生成的token是有过期时间的,
可以通过以下方式重新创建node节点和master节点的token
没有记录集群 join 命令的可以通过以下方式重新获取:
kubeadm token create --print-join-command --ttl=0
或者下面的方式
#重新生成node节点token
#查看当前环境中的token和有效时间
kubectl get secret -n kube-system
kubectl get secret -n kube-system bootstrap-token0-5wfwud -o yaml
#查看bootstrap token信息,其中expiration就是过期时间,用base64命令解密可以看到准确时间
echo "expiration里的字符串" | base64 --decode #查看过期时间
#删除过期token
kubectl delete secret -n kube-system bootstrap-token0-5wfwud
#生成新的node节点密钥
kubeadm token create --print-join-command
#重新生成master节点token
kubeadm init phase upload-certs --upload-certs
使用kubeadm join命令将新节点加入集群,如果命令提示no route to host请查看Master的iptables规则是否清空
kubeadm join 192.168.91.128:6443 --token v0foy6.svwh862jcr2efdws --discovery-token-ca-cert-hash sha256:c42245a312a4de167ad87fa839c0bedaf4cb7cd30a104e8e7fc0657ee1cd33f1
在主节点使用kubectl get nodes验证状态为Ready,如果提示Not Ready的话需要等node节点的镜像都拉取完毕。显示角色为代表它可以成为其他角色。至此Node节点配置完毕
#在master执行此命令查看详情
kubectl get pod -n kube-system -o wide
Kubeadm集群部署k8s相关推荐
- kubeadm集群修改k8s证书时间到99年
kubeadm集群修改k8s证书时间到99年 kubeadm修改证书时间 (1).查看当前的证书时间 # kubeadm alpha certs check-expiration [check-exp ...
- K8S集群搭建:安装kubeadm集群部署工具
将镜像包上传至服务器每个节点 mkdir /usr/local/k8s-install cd /usr/local/k8s-install XFTP上传安装文件 每个CentOS上安装Docker 使 ...
- 【好文收藏】K8S集群部署CoreDNS服务
K8S集群部署CoreDNS服务 k8s集群中的应用通常是通过ingress实现微服务发布的,前文介绍过在K8S集群中使用traefik实现服务的自动发布,其实现方式是traefik通过集群的DNS服 ...
- kubeadm部署k8s_(Ansible)三分钟部署一套高可用/可扩展的kubeadm集群
介绍 容器的兴起改变了我们开发,部署和维护软件的方式.容器使我们能够将构成应用程序的不同服务打包到单独的容器中,并在一组虚拟机和物理机上部署这些容器.这就产生了容器编排工具,可以自动执行基于容器的应用 ...
- k8s管理java项目_Kubernetes集群部署项目-部署Java项目(推送镜像
Kubernetes(简称k8s)是谷歌开源的一套容器化集群管理系统,当下已被众多大厂及中小企业采用,容器化技术是目前的大势所趋. 本套教程k8s版本升级为最新版1.18.0,内容由浅入深,且更加深化 ...
- 来了,k8s!-----------------k8s集群部署
k8s的集群部署,官方提供了三种方式: minikube Minikube是一个工具,可以在本地快速运行的一个单点的k8s,仅用于尝试k8s或日常开发的用户使用.部署地址:https://kubern ...
- keepalive+nginx高可用K8S集群部署
1.准备工作 1.1集群部署规划 K8S集群角色 节点IP 节点名称 OS 控制节点 192.168.0.180 k8smaster1 Centos7.9 控制节点 192.168.0.181 k8s ...
- kubeadm集群化部署多master节点(生产环境适用)
一.背景介绍. k8s通过master集中式管理worknode的容器编排系统,而在生产环境为了维护高可用性,master的地位起到举无轻重的作用.一旦master节点失守,则会导致整个集群服务不可用 ...
- K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程
K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...
最新文章
- 文件打开不关闭程序会输出吗_干货!很多资深用户都不知道的10个BOOX阅读器使用技巧,很实用!...
- 清华物理化学97—13真题,部分是回忆版
- 在3kbps的带宽下还能清晰地语音聊天?
- leetcode 321. 拼接最大数(单调栈)
- php中json_decode()和json_encode()的使用方法
- Python安装FrankMocap实现3D人体姿态估计
- eclipse 使用lombok 出现的问题
- 商业模式画布模板——From 《商业模式新生代》
- 计算机专业考注册测绘师经验,注册测绘师考试攻略
- Python编写远程控制工具
- 利用python通过两点构成的空间直线和平面计算交点
- 精密划片机的三种切割方式
- 圣光照耀联盟—PostgreSQL临时表的创建与使用过程
- Simulia TOSCA Structure v8.1流体力学结构优化软件
- Ubuntu Linux 操作系统-清华大学开源软件镜像站下载
- 论文阅读笔记:《自然语言处理中的预训练模型》
- 关于mac系统外接键盘的设置
- 金融学习资料 | 数学篇
- 收藏!2020 年最具潜力 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台
- SQL Server外部链接时报错:Error locating serverInstance specified