kubeadm 安装k8s

2023-11-19

关于k8s集群化部署,以下均是个人一步一步的完成部署,并且会罗列出在部署过程中遇到的各种问题及其解决方式。

一、环境准备。【环境准备阶段试用与master节点部署与work节点部署,即master和work节点全部都需要执行这些步骤】

1、关闭防火墙和禁用selinux。

systemctl stop firewalld
setenforce 0

 

2、安装YUM。

rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
yum makecache fast
yum install -y vim wget net-tools lrzsz
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、配置镜像源。

# 配置源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

4、安装kubelet kubeadm kubectl,因为 k8s 每个版本对于docker版本是有硬性要求的,因此首先选择k8s和docker配套的版本号,根据自身所需要的根据版本号进行安装,否则因为配套不成功初始化会失败。

#查询当前镜像可安装的kubernetes版本号,执行以下命令
yum list --showduplicates | grep 'kubeadm\|kubectl\|kubelet'

#以下两种方式选择其一即可,最好指定版本号

#如果需要安装指定版本的kubernetes,则安装如下格式执行命令,以下命令安装的1.14.2版本
yum install -y kubelet-1.16.15-0 kubeadm-1.16.15-0 kubectl-1.16.15-0


# 安装,默认安装的最新版本kubernetes,不建议采用次操作,可以选择根据自己需求选择合适版本号
yum install -y kubelet kubeadm kubectl

5、查看k8s安装是否成功

#查询当前k8s版本号
kubectl version

如果遇到如下图所示的错误,则执行(仅仅在master)

#设置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf

 

6、开机启动kubelet

systemctl enable kubelet

7、关闭Swap。

swapoff -a
  • 注释掉配置

8、安装docker,docker的具体安装步骤参见:https://www.jianshu.com/p/7d9ff93bc89ehttps://www.jianshu.com/p/ca061c06d9c6

#查看仓库中可安装的docker类型
yum list docker-ce --showduplicates | sort -r


#安装指定版本的docker, 例如以下是安装 18.03.1版本的docker
yum -y install docker-ce-18.06.3.ce-3.el7

#以下命令默认是安装docker最新版本
yum install docker-ce -y 


#--------------------------------以下是docker其他操作,初始化成功则无需操作。
#docker删除操作,如果有需要,例如重新安装docker
yum remove docker docker-common docker-selinux docker-engine docer-io

#如果安装是吧,提示冲突,则执行以下命令,删除旧版本docker

yum erase docker-ce-18.03.1.ce-1.el7.centos

#然后再执行安装
yum -y install docker-ce-18.03.1.ce-1.el7.centos
  • 启动docker
  • 由于docker默认的加速器是国外的经常超时,所以需要配置一个阿里云的镜像加速器:
vim /etc/docker/daemon.json 

daeman.json中输入以下内容:


{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors":["https://m9r2r2uj.mirror.aliyuncs.com"],
"graph": "/mnt/docker-data",
 "storage-driver": "overlay"
}

解析:

a、


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

 

docker服务的Cgroup Driver默认值为cgroupfs,当我们用kubeadm初始化(init)的时候会出现如下警告:

[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
error execution phase preflight: [preflight] Some fatal errors occurred:

b、


{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors":["https://m9r2r2uj.mirror.aliyuncs.com"],
}

由于docker默认的加速器是国外的经常超时,所以需要配置一个阿里云的镜像加速器:

c、


{
"graph": "/mnt/docker-data",
 "storage-driver": "overlay"
}

以上命令是解决 system start docker/ service docker restart,docker启动失败,如下所示:

......docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. .......

 

重启docker:

service docker restart

9、启动docker。

systemctl enable docker
systemctl start docker

 

10、kubeadm拉取镜像文件, k8s版本号根据自身情况进行选择,以下是配置了一个shell文件,也可单独运行命令行。

  • 查看k8s说需要的插件,及其插件的版本号
    kubeadm config images list

    打印出的结果如下

  • 拉取镜像文件,并tag为k8s安装插件说规定的名称,版本号一定要和上面打印出的结果一致
#!/bin/bash
k8sversion=v1.16.15
etcdversion=3.3.15-0
dnsversion=1.6.2
# k8s
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$k8sversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$k8sversion k8s.gcr.io/kube-apiserver:$k8sversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$k8sversion

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$k8sversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$k8sversion k8s.gcr.io/kube-controller-manager:$k8sversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$k8sversion

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$k8sversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$k8sversion k8s.gcr.io/kube-scheduler:$k8sversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$k8sversion

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$k8sversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$k8sversion k8s.gcr.io/kube-proxy:$k8sversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$k8sversion
# etcd 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$etcdversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$etcdversion k8s.gcr.io/etcd:$etcdversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$etcdversion

# coredns
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$dnsversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$dnsversion k8s.gcr.io/coredns:$dnsversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$dnsversion

# pause
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1

11、设置网桥,以下命令必须执行,否则安装master和work节点会报错。

echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

二、安装master节点

1、、初始化集群,安装master节点

kubeadm init --pod-network-cidr 10.244.0.0/16

kubeadm 初始化参数介绍如下:

[root@k8s-master ~]# kubeadm init --help
Run this command in order to set up the Kubernetes master.

Usage:
  kubeadm init [flags]

Flags:
      --apiserver-advertise-address string   API Server监听的IP地址,默认是0.0.0.0
      --apiserver-bind-port int32            API Server监听的端口 (default 6443)
      --apiserver-cert-extra-sans strings    Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names.
      --cert-dir string                      保存和存储证书的路径。(default "/etc/kubernetes/pki")
      --config string                        kubeadm配置文件的路径。 警告:配置文件的使用是实验性的。
      --cri-socket string                    指定要连接的CRI套接字。 (default "/var/run/dockershim.sock")
      --dry-run                              Don't apply any changes; just output what would be done.
      --feature-gates string                 A set of key=value pairs that describe feature gates for various features. Options are:
                                             Auditing=true|false (ALPHA - default=false)
                                             CoreDNS=true|false (default=true)
                                             DynamicKubeletConfig=true|false (ALPHA - default=false)
                                             SelfHosting=true|false (ALPHA - default=false)
                                             StoreCertsInSecrets=true|false (ALPHA - default=false)
  -h, --help                                 help for init
      --ignore-preflight-errors strings      预检查时忽略哪些错误。Example: 'IsPrivilegedUser,Swap'. 值为“all”时,忽略所有检查到的错误。
      --kubernetes-version string            指定Kubernetes版本。 (default "stable-1.11")
      --node-name string                     Specify the node name.
      --pod-network-cidr string              指定Pod网络的IP地址范围。 如果设置,控制平面将自动为每个节点分配CIDR。
      --service-cidr string                  Service网络使用的IP地址范围。 (default "10.96.0.0/12")
      --service-dns-domain string            Use alternative domain for services, e.g. "myorg.internal". (default "cluster.local")
      --skip-token-print                     Skip printing of the default bootstrap token generated by 'kubeadm init'.
      --token string                         The token to use for establishing bidirectional trust between nodes and masters. The format is [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
      --token-ttl duration                   The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set to '0', the token will never expire (default 24h0m0s)

Global Flags:
  -v, --v Level   log level for V logs

如果出现以下信息,则代表master部署成功:

#出现这行信息代表 master节点部署成功
Your Kubernetes control-plane has initialized successfully!

#启动集群,则还需要执行以下3条语句
To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

#以下命令,是说将node节点增加到master,构成集群中的一个节点,请保存本语句(token等),以在增加node的时候使用
kubeadm join 192.168.95.129:6443 --token i9ocw1.twi5llxnf4crvnli \
    --discovery-token-ca-cert-hash sha256:b7c3c48d252b3fc3a56d47abea26d824ebd67ae1bf81e28f4292188a8fbc55f7 

2、执行以下3条语句。

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

3、执行 kubectl get nodes 如果出现以下提示,则也是执行以上3条语句

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error” while trying to verify candidate authority certificate “kubernetes”)

如果是执行了kubeadm reset清除集群的所有配置,进行重新部署出现以上问题,则首先需要执行以下语句,然后再执行以上3条语句。

rm  -rf  $HOME/.kube

 

4、安装flannel插件(网络插件),hosts与hostname均增加以下配置

  • 设置flannel的镜像源(国外镜像源可能拉不下来)
    vim /etc/hosts
    
    
    
    #以下是增加的配置数据
    #199.232.4.133 raw.githubusercontent.com
    #199.232.68.133 raw.githubusercontent.com







     
  • 安装flannel插件执行以下命令
    # 获取flannel部署文件.
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # 部署: 
    kubectl apply -f kube-flannel.yml
  • 配置服务端口(修改服务端口范围)
     vim /etc/kubernetes/manifests/kube-apiserver.yaml 
    ---
    ...
        - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
           # Add by cynen 2020-10-12
        - --service-node-port-range=80-32767
    ...

    重启kubelet。
     

    systemctl daemon-reload && systemctl restart kubelet

     

三、部署work节点

  1. 执行第一部分master与work节点公共部分。
  2. 执行以下命令。
    kubeadm join 172.16.8.31:6443 --token ro7gjw.yj1fbi9r94kvipov --discovery-token-ca-cert-hash sha256:aecb44fd1a67ca0f800ec337e7c45991a62d7fbc4d08876b723549cbd6312e8f 
  3. 如果出现以下截图的异常,则重新生成token
     

    #token会过期,有效期为5分钟
    kubeadm token create --print-join-command

    异常截图:

四、集群搭建成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubeadm 安装k8s 的相关文章

随机推荐

  • Mysql8.0出现this is incompatible with sql_mode=only_full_group_by

    MySQL的sql mode模式说明及设置 sql mode是个很容易被忽视的变量 默认值是空值 在这种设置下是可以允许一些非法操作的 比如允许一些非法数据的插入 在生产环境必须将这个值设置为严格模式 所以开发 测试环境的数据库也必须要设置
  • phabricator mysql_搭建 Phabricator 我遇到的那些坑 - 简书

    一 可能会用到的命令 1 重启phd守护线程 先进入到Fabricator文件夹下面 然后 bin phd log 2 删除一个代码仓库 bin remove destroy rMOBILE 代码库的前缀名字 3 重启mysql数据库 su
  • 数据结构:力扣OJ题

    目录 编辑题一 链表分割 思路一 题二 相交链表 思路一 题三 环形链表 思路一 题四 链表的回文结构 思路一 链表反转 查找中间节点 本人实力有限可能对一些地方解释的不够清晰 可以自己尝试读代码 望海涵 题一 链表分割 现有一链表的头指针
  • Java8 新特性 之 lambda 表达 和 函数式接口

    lambda 表达式 概念 lambda 表达式是一个匿名函数 可以把 lambda 表达式理解为是一段可以传递的代码 更简洁 更灵活 使 Java 的语言表达能力得到了提升 lambda 表达式是作为接口的实现类的对象 万事万物皆对象 使
  • Java取模运算中余数的符号选择问题

    Java取模运算中 余数 的符号和 被除数 符号相同 除号前面的数 即与第一个数的符号相同 public class MyTestProgram public static void main String args 被除数 除数 商 被除
  • idea连接mysql注册登录_idea配置连接数据库的超详细步骤

    学习时 使用IDEA的时候 需要连接Database 连接时遇到了一些小问题 下面记录一下操作流程以及遇到的问题的解决方法 一 连接操作 简介 介绍如何创建连接 具体连接某个数据库的操作流程 1 1 创建连接 打开idea 点击右侧的 Da
  • 并行程序设计作业7/7

    目录 两个线程 一个生产者一个消费者 2k个线程 奇数消费者偶数生产者 2k个线程 每个既可以是生产者又可以是消费者 两个线程 一个生产者一个消费者 include
  • cmake policy

    1 cmake policy是什么 cmake policy可以理解为cmake的语法标准 也就是说 它规定了cmake在解析CMakeLists txt文件时的行为 2 cmake policy的用途是什么 cmake在进化的过程中 需要
  • CAN分析仪 USBCAN USB转CAN CAN转换调试器接口卡使用指导

    USBCAN系列便携式CAN分析仪 通过USB接口快速扩展一路CAN通道 使接入CAN网络非常容易 它具有一体式和小巧紧凑的外形 特别适合于随身携带 第一步 将usbcan卡连接电脑如图 usb灯亮红灯 打开 USBCAN系列便携式CAN总
  • 编程之美2015初赛第二场AB

    题目1 扑克牌 时间限制 2000ms 单点时限 1000ms 内存限制 256MB 描述 一副不含王的扑克牌由52张牌组成 由红桃 黑桃 梅花 方块4组牌组成 每组13张不同的面值 现在给定52张牌中的若干张 请计算将它们排成一列 相邻的
  • 2023.02

    2023 02 01 将mpu写到dxReagion中的数据打印到文件中 调试解决mpu2ipu和ipu2mpu同时跑线程未关掉导致的异常 2023 02 02 学习2102 spec文档和mpu设计文档 将mpuipu测试用例加到回归测试
  • SpringMVC访问静态资源问题

    搭建Spring MVC环境时 如果在Spring MVC的配置文件中DispatcherServlet拦截 则会对 html js jpg等静态文件的访问也会被拦截 想要访问这些静态资源必须要进行相应的配置这里推荐两中比较简单的方法 1
  • 【无监督学习】1、MOCOv1

    文章目录 一 背景 二 方法 2 1 对比学习 字典查表 2 2 动量对比函数 2 3 Pretext Task 三 效果 3 1 数据集 3 2 训练细节 3 3 实验 四 代码 论文 Momentum Contrast for Unsu
  • python中int什么意思_python 的 int() 函数是什么,怎么用

    int 函数是python的一个内置函数 用于把一个字符串或者数字转换为 整型 下面来具体看一下 工具 原料 IDLE 电脑 方法 步骤 1 int 的常用语法 int 字符串或者数字 进制数 进制数默认为十进制 如果int 中没有参数 返
  • PDF学习十:图形状态

    说明 一个PDF应用程序 Foxit Reader或Adobe Reader 维护内部数据结构称为图形状态 它保存了当前图形控制参数 这些参数定义在全局框架 在全局框架内可执行图形操作符 例如 f 填充 操作符隐式调用当前颜色这个参数 S
  • Python爬虫学习汇总(持续更新)

    最近在研究爬虫 我把和爬虫相关的内容都总结到这了 这持续更新 1 使用Python爬取妹子网的图片 批量下载 附带源码 超详细 2 爬虫实例源码下载 修改目录直接能运行 3 Python爬虫之xpath的基本使用 解析HTML详细介绍 4
  • CentOS7 最小化安装后的必备操作

    来源于 https blog csdn net f srion article details 54910943 在VM虚拟机中安装CentOS 7 时 有时候顾虑到电脑硬件性能 我们需要最小化安装 而最小化安装后与centos6的版本是有
  • 魔百盒 修改时间服务器,魔百盒网关服务器下发超时

    魔百盒网关服务器下发超时 内容精选 换一换 第三方应用在物联网平台订阅了设备服务信息变化通知后 订阅的通知类型为serviceInfoChanged 当平台向设备下发命令修改设备服务信息时 平台会向第三方应用推送通知消息 支持物联网平台向订
  • python的内置容器(list、set、tuple、dict)概念、使用及遍历方法

    容器概念 线性表 有序的容器结构 数组 array 是由连续的内存空间组成 栈 stack 先进后出 后进先出 队列 queue 先进先出 后进后出 链表 list 是由不连续的内存空间组了逻辑结构 单向链表 内存小 效率低 双向列表 内存
  • kubeadm 安装k8s

    关于k8s集群化部署 以下均是个人一步一步的完成部署 并且会罗列出在部署过程中遇到的各种问题及其解决方式 一 环境准备 环境准备阶段试用与master节点部署与work节点部署 即master和work节点全部都需要执行这些步骤 1 关闭防