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相关推荐

  1. kubeadm集群修改k8s证书时间到99年

    kubeadm集群修改k8s证书时间到99年 kubeadm修改证书时间 (1).查看当前的证书时间 # kubeadm alpha certs check-expiration [check-exp ...

  2. K8S集群搭建:安装kubeadm集群部署工具

    将镜像包上传至服务器每个节点 mkdir /usr/local/k8s-install cd /usr/local/k8s-install XFTP上传安装文件 每个CentOS上安装Docker 使 ...

  3. 【好文收藏】K8S集群部署CoreDNS服务

    K8S集群部署CoreDNS服务 k8s集群中的应用通常是通过ingress实现微服务发布的,前文介绍过在K8S集群中使用traefik实现服务的自动发布,其实现方式是traefik通过集群的DNS服 ...

  4. kubeadm部署k8s_(Ansible)三分钟部署一套高可用/可扩展的kubeadm集群

    介绍 容器的兴起改变了我们开发,部署和维护软件的方式.容器使我们能够将构成应用程序的不同服务打包到单独的容器中,并在一组虚拟机和物理机上部署这些容器.这就产生了容器编排工具,可以自动执行基于容器的应用 ...

  5. k8s管理java项目_Kubernetes集群部署项目-部署Java项目(推送镜像

    Kubernetes(简称k8s)是谷歌开源的一套容器化集群管理系统,当下已被众多大厂及中小企业采用,容器化技术是目前的大势所趋. 本套教程k8s版本升级为最新版1.18.0,内容由浅入深,且更加深化 ...

  6. 来了,k8s!-----------------k8s集群部署

    k8s的集群部署,官方提供了三种方式: minikube Minikube是一个工具,可以在本地快速运行的一个单点的k8s,仅用于尝试k8s或日常开发的用户使用.部署地址:https://kubern ...

  7. keepalive+nginx高可用K8S集群部署

    1.准备工作 1.1集群部署规划 K8S集群角色 节点IP 节点名称 OS 控制节点 192.168.0.180 k8smaster1 Centos7.9 控制节点 192.168.0.181 k8s ...

  8. kubeadm集群化部署多master节点(生产环境适用)

    一.背景介绍. k8s通过master集中式管理worknode的容器编排系统,而在生产环境为了维护高可用性,master的地位起到举无轻重的作用.一旦master节点失守,则会导致整个集群服务不可用 ...

  9. 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 个重要概念 ...

最新文章

  1. 文件打开不关闭程序会输出吗_干货!很多资深用户都不知道的10个BOOX阅读器使用技巧,很实用!...
  2. 清华物理化学97—13真题,部分是回忆版
  3. 在3kbps的带宽下还能清晰地语音聊天?
  4. leetcode 321. 拼接最大数(单调栈)
  5. php中json_decode()和json_encode()的使用方法
  6. Python安装FrankMocap实现3D人体姿态估计
  7. eclipse 使用lombok 出现的问题
  8. 商业模式画布模板——From 《商业模式新生代》
  9. 计算机专业考注册测绘师经验,注册测绘师考试攻略
  10. Python编写远程控制工具
  11. 利用python通过两点构成的空间直线和平面计算交点
  12. 精密划片机的三种切割方式
  13. 圣光照耀联盟—PostgreSQL临时表的创建与使用过程
  14. Simulia TOSCA Structure v8.1流体力学结构优化软件
  15. Ubuntu Linux 操作系统-清华大学开源软件镜像站下载
  16. 论文阅读笔记:《自然语言处理中的预训练模型》
  17. 关于mac系统外接键盘的设置
  18. 金融学习资料 | 数学篇
  19. 收藏!2020 年最具潜力 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台
  20. SQL Server外部链接时报错:Error locating serverInstance specified

热门文章

  1. python求平均数和中位数
  2. 瑞幸创造VC圈神话,风暴中的OYO回应,企鹅杏仁集团完成2.5亿美元融资...
  3. Cadence 17.4将状态栏由黑底白字改为白底黑字
  4. (一)protege之使用入门
  5. 【附源码】计算机毕业设计java在线学习交流平台设计与实现
  6. DebugView Windows 7 不显示调试信息
  7. 用户故事地图编写方法
  8. java菜鸟1:jdk 安装
  9. 英国手机漫谈之签手机喽!
  10. 使用STM32CubeMX新建小熊派的STM32L431RCT6工程实现LED灯闪烁