【k8s学习2】二进制文件方式安装 Kubernetes之kubernetesmaster部署

2023-10-27

【k8s学习2】二进制文件方式安装 Kubernetes之etcd集群部署_温殿飞的博客-CSDN博客

 如果已经完成了etcd的部署,可以按照这个文章继续部署。

部署安全的kubernetes master高可用集群。

(1)下载kubernetes

 直接到github网站上搜索kubernetes,然后点击对应的项目进入。

找到releases页面

https://github.com/kubernetes/kubernetes/releases?page=1

然后再对应版本点击CHANGELOG就会跳转到下面页面,1.19即版本号,url里面可以直接修改。 

 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md 

页面往下拉找到对应的版本, 点击Server Binaries,按道理应该会调到对应版本的下载段但是我的没有跳转。

直接往下拉滚动条找到对应的版本。

 再往下拉倒server binaries就可以看到下载地址了。

wget https://dl.k8s.io/v1.19.0/kubernetes-server-linux-amd64.tar.gz

wget https://dl.k8s.io/v1.19.0/kubernetes-client-darwin-amd64.tar.gz

wget https://dl.k8s.io/v1.19.0/kubernetes-node-linux-amd64.tar.gz

解压kubernetes-server-linux-amd64.tar.gz

#tar -zxvf kubernetes-server-linux-amd64.tar.gz

#cd kubernetes/server/bin/

#ls
apiextensions-apiserver  kube-apiserver             kube-controller-manager             kubectl     kube-proxy.docker_tag  kube-scheduler.docker_tag
kubeadm                  kube-apiserver.docker_tag  kube-controller-manager.docker_tag  kubelet     kube-proxy.tar         kube-scheduler.tar
kube-aggregator          kube-apiserver.tar         kube-controller-manager.tar         kube-proxy  kube-scheduler         mounter

#将可执行文件放到/usr/bin/

#mv apiextensions-apiserver kubeadm kube-aggregator kube-apiserver kube-controller-manager kubectl kubelet kube-proxy kube-scheduler   /usr/bin/

文件名 说明
kube-apiserver kube-apiserver 主程序
kube-apiserver.docker_tag kube-apiserver docker 镜像的 tag
kube-apiserver.tar kube-apiserver docker 镜像文件
kube-controller-manager kube-controller-manager 主程序
kube-controller-manager.docker_tag kube-controller-manager docker 镜像的 tag
kube-controller-manager.tar kube-controller-manager docker 镜像文件
kube-scheduler kube-scheduler 主程序
kube-scheduler.docker_tag kube-scheduler docker 镜像的 tag
kube-scheduler.tar kube-scheduler docker 镜像文件
kubelet kubelet 主程序
kube-proxy kube-proxy 主程序
kube-proxy.docker_tag kube-proxy docker 镜像的 tag
kube-proxy.tar kube-proxy docker 镜像文件
kubectl 客户端命令行工具
kubeadm Kubernetes 集群安装的命令工具
apiextensions-apiserver 提供实现自定义资源对象的扩展 API Server
kube-aggregator 聚合 API Server 程序

然后需要在/usr/lib/systemd/system/目录下为各个服务创建systemd服务配置文件,就完成了服务的安装。

(2)部署kube-apiserver服务

(2.1)设置kube-apiserver服务所需的ca证书。

 #mkdir k8s_ssl 

#cd k8s_ssl/

#vim master_ssl.cnf

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation,digitalSignature,keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local #上面4个都是虚拟服务名称
DNS.5 = master01             ##主机名
DNS.6 = master02             ##主机名
IP.1 = 169.169.0.1              ##master service虚拟服务的clusterIP地址。
IP.2 = 192.168.52.21          ##主机ip
IP.3 = 192.168.52.22          ##主机ip
IP.4 = 192.168.52.100        ##lvs用的vip

 创建证书

#openssl genrsa -out apiserver.key 2048

#openssl req -new -key apiserver.key -config master_ssl.cnf -subj "/CN=192.168.52.21" -out apiserver.csr

#openssl x509 -req -in apiserver.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile master_ssl.cnf -out apiserver.crt 
#mv apiserver.crt apiserver.key  /etc/kubernetes/pki/

 (2.2)为kube-apiserver服务创建systemd服务

配置文件/usr/lib/systemd/system/kube-apiserver.service 

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=always

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/apiserver 的内容通过环境变量 KUBE_API_ARGS 设置 kube-apiserver 的全部启动参数。新版的参数可能不同。

KUBE_API_ARGS="--secure-port=6443 \
--tls-cert-file=/etc/kubernetes/pki/apiserver.crt \
--tls-private-key-file=/etc/kubernetes/pki/apiserver.key \
--client-ca-file=/etc/kubernetes/pki/ca.crt \
--apiserver-count=1 \
--endpoint-reconciler-type=master-count \
--etcd-servers=https://192.168.52.21:2379,https://192.168.52.22:2379 \
--etcd-cafile=/etc/kubernetes/pki/ca.crt \
--etcd-certfile=/etc/etcd/pki/etcd_client.crt \
--etcd-keyfile=/etc/etcd/pki/etcd_client.key \
--service-cluster-ip-range=169.169.0.0/16 \
--service-node-port-range=30000-32767 \
--allow-privileged=true \
--v=0"

启动服务

systemctl restart kube-apiserver && systemctl enable kube-apiserver

systemctl status kube-apiserver

很好没有报错直接成功了。 同样的配置把另外一台也配置上。

(2.3)创建客户端证书

kube-controller-manager、kube-scheduler、kublet和kube-proxy 都是apiserver的客户端,访问kube-apiserver的服务。用openssl创建证书并放到/etc/kubernetes/pki/ 创建好的证书考到同集群的其他服务器使用。

openssl genrsa -out client.key 2048 
openssl req -new -key client.key -subj "/CN=admin" -out client.csr
openssl x509 -req -in client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out client.crt -days 36500

cp client.key client.crt /etc/kubernetes/pki/

(2.4). 创建客户端连接 kube-apiserver 服务所需的 kubeconfig 配置文件。

两台都要部署,为kube-controller-manager、kube-scheduler/kubelet、kube-proxy、kubectl统一使用的链接kube-api的配置文件。

apiVersion: v1
kind: Config
clusters:
- name: default
  cluster:
    server: https://192.168.52.100:9443
    certificate-authority: /etc/kubernetes/pki/ca.crt
users:
- name: admin
  user:
    client-certificate: /etc/kubernetes/pki/client.crt
    client-key: /etc/kubernetes/pki/client.key
contexts:
- context:
    cluster: default
    user: admin
  name: default
current-context: default

 (2.5)部署kube-controller-manager服务

两台都要部署,创建systemd的service文件,/usr/lib/systemd/system/kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=always

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/kube-controller-manager.service 的内容通过环境变量KUBE_CONTROLLER_MANAGER_ARGS设置的kube-controller-manager 的全部启动参数,包含CA安全配置的启动参数示例如下:

KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--leader-elect=false \
--service-cluster-ip-range=169.169.0.0/16 \
--service-account-private-key-file=/etc/kubernetes/pki/apiserver.key \
--root-ca-file=/etc/kubernetes/pki/ca.crt \
--v=0"

systemd执行的时候其实是执行下面的命令。

/usr/bin/kube-controller-manager --kubeconfig=/etc/kubernetes/kubeconfig --leader-elect=false --service-cluster-ip-range=169.169.0.0/16 --service-account-private-key-file=/etc/kubernetes/pki/apiserver.key --root-ca-file=/etc/kubernetes/pki/ca.crt --v=0 

 接下来启动服务即可

systemctl restart kube-controller-manager

systemctl enable kube-controller-manager

 (2.6)部署kube-scheduler服务

两台都要部署,为kube-scheduler服务创建systemd服务配置文件//usr/lib/systemd/system/kube-scheduler.service

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=always

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/scheduler通过环境变量$KUBE_SCHEDULER_ARGS 实现设置服务的全部参数。

KUBE_SCHEDULER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--leader-elect=false \
--v=0"

 (2.7). 使用 HAProxy 和 keepalived 部署高可用负载均衡器

使用docker进行安装,docker的安装方法参考我之前的文章使用yum安装。

Docker学习笔记1-在centos服务器上安装docker_温殿飞的博客-CSDN博客

 也可以使用二进制形式安装docker

 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz
tar -xf docker-18.03.1-ce.tgz

cp docker/* /usr/bin/

创建docker的systemd服务文件/usr/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
 
[Install]
WantedBy=multi-user.target

systemctl daemon-reload

systemctl start docker

systemctl enable docker

接下来就是使用docker启动一个haproxy服务,创建haproxy配置文件/etc/kubernetes/haproxy.cfg 

[root@master01 kubernetes]# cat haproxy.cfg 
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4096
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
    
defaults
    mode                http
    log                 global
    option              httplog
    option              dontlognull
    option              http-server-close
    option              forwardfor      except 127.0.0.0/8
    option              redispatch
    retries             3
    timeout http-request        10s
    timeout queue               1m
    timeout connect             10s
    timeout client              1m
    timeout server              1m
    timeout http-keep-alive     10s
    timeout check               10s
    maxconn                     3000
    
frontend kube-apiserver
    mode                tcp
    bind                *:9443
    option              tcplog
    default_backend     kube-apiserver
    
listen stats
    mode                http
    bind                *:8888
    stats auth          admin:password
    stats refresh       5s
    stats realm         HAProxy\ Statistics
    stats uri           /stats
    log                 127.0.0.1 local3 err
    
backend kube-apiserver
    mode        tcp
    balance     roundrobin
    server master01 192.168.52.21:6443 check
    server master02 192.168.52.22:6443 check

 然后执行命令启动容器,并将文件挂载到容器

 docker run -d --name k8s-haproxy --net=host --restart=always -v ${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxytech/haproxy-debian

 然后浏览器打开,输入用户admin 密码password 

http://192.168.52.21:8888/stats

 另外一台也部署上hapeoxy服务。

(2.8)部署lvs做vip的高可用,这里是实验都放在这两台服务器上了,生产环境可以分开设服务器。

创建keepalive配置

! Configuration File for keepalived

global_defs {
    router_id LVS_1
}

vrrp_script checkhaproxy
{
   script "/usr/bin/check-haproxy.sh"
   interval 2
   weight -30
}

vrrp_instance VI_1 {
   state MASTER     #主用master唯一  备用BACKUP可以有多个
   interface ens33  #注意这里是你的服务器网卡名
   virtual_router_id 51 
   priority 100
   advert_int 1
   
   virtual_ipaddress {
      192.168.52.100/24 dev ens33      ##vip
   }
   
   authentication {
      auth_type PASS
      auth_pass password
   }
   
   track_script {
      checkhaproxy
   }
}

在/usr/bin目录创建hapoxy端口检测脚本check-haproxy.sh,用于keepalived判断服务状态切换vip

#!/bin/bash
# Program:
#       check health
# History:
# 2022/01/14    wendianfei version:0.0.1

path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export path

count=$(netstat -apn | grep 9443 | wc -l)

if [ ${count} -gt 0 ]
then

    exit 0
    
else

    exit 1
    
fi

使用docker创建keepalived服务。 

docker run -d --name k8s-keepalived --restart=always --net=host --cap-add=NET_ADMIN --cap-add=NET_BROADCAST --cap-add=NET_RAW -v ${PWD}/keepalived.conf:/container/service/keepalived/assets/keepalived.conf -v ${PWD}/check-haproxy.sh:/usr/bin/check-haproxy.sh osixia/keepalived:2.0.20 --copy-service

 使用docker ps 查看容器运行成功 

 ip -a 查看服务器网卡已经挂载vip

 浏览器访问能返回http页面证明keepalived+hapoxy组成的负载均衡系统部署完成,到这一步master就部署完了

http://192.168.52.100:9443/

http://192.168.52.100:8888/stats

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

【k8s学习2】二进制文件方式安装 Kubernetes之kubernetesmaster部署 的相关文章

随机推荐

  • 从XSS Playload 学习浏览器解码

    首先在学习之前 我们需要先知道一点 服务器在解析编码的时候 首先解析的是html实体编码 第二是URL编码 最后解析的就是编码 HTML实体编码 一个HTML解析器作为一个状态机 他从输入流中获取字符并且按照转换规则转换到另一种状态 在解析
  • 2021-09-30

    sql server 查询数据库中包含某字段的所有的表 select object name id objName Name as colName from syscolumns where name like DeptID and id
  • 龙书-第一章

    龙书 编译原理 恶补一下 但是又要显得有点成果 这样比较有成就感 所以记录一下 大概整个会按照书本的顺序来 主要记录一些觉得有必要的东西 文章目录 龙书 编译原理 1 1 语言处理器 1 2 一个编译器的结构 1 3 程序设计语言的发展历程
  • 数据挖掘学习(一):特征工程

    文章目录 概述 一 特征选择 1 选择合适的特征 1 1 过滤法选择特征 1 2 包装法选择特征 1 3 嵌入法选择特征 2 寻找高级特征 二 特征表达 2 1 缺失值处理 2 2 特殊的特征处理 2 3 离散特征的连续化处理 2 4 离散
  • 合并相同记录字段数据

    生成测试数据create table t id int psid int name varchar 80 insert into t select 1 1 name1 insert into t select 2 1 name2 inser
  • 解决d3dcompiler_42.dll错误找不到等问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个d3dcompiler 42 dll文件进行安装
  • C++之单例模式

    文章目录 什么是单例模式 单例模式中的饿汉模式 单利模式中的懒汉模式 什么是单例模式 保证一个类只有一个实例 并提供一个访问它的全局访问点 该实例被所有程序模块共享 单例模式中的饿汉模式 饿汉模式 单例定义的时候就进行实力化 空间换时间的做
  • Android 实现聊天窗口输入框弹起

    实现效果 往下滑会加载历史数据 1 在清单文件中设置
  • php 手写一个完美的守护进程

    php 守护进程原理与实践 前事提要 基本概念 基本特点 在Linux中 大概有三种方式实现脚本后台化 创建守护进程要求 1 设置文件创建屏蔽字 umask 0 2 调用fork 父进程退出 exit 3 子进程调用setsid 函数来创建
  • Linux·网络编程套接字(一)

    目录 预备知识 理解源IP地址和目的IP地址 理解源MAC地址和目的MAC地址 理解源端口号和目的端口号 PORT VS PID 认识TCP协议和UDP协议 网络字节序 socket编程接口 socket常见API sockaddr结构 简
  • SQL Server 数据库中复制一张表数据到另一张表的详细步骤与代码示例

    系列文章目录 文章目录 系列文章目录 前言 一 使用 INSERT INTO 语句 1 准备目标表 2 使用 INSERT INTO 语句 二 使用 SELECT INTO 语句 1 创建目标表 总结 前言 在 SQL Server 数据库
  • labelme标注的多分类数据集转化为YOLO数据集

    1 如何使用脚本 此脚本支持多分类的目标检测数据 1 修改dir json为自己生成的coco数据集文件夹目录 2 修改dir txt为要放进去Yolo格式标签的文件夹目录 3 直接运行代码 import os import json la
  • Qt 对话框的使用

    对话框在Qt GUI应用程序中有着广泛的用途 对话框有模态 非模态两种情况 对于参数选择的对话框 一般用模态对话框 对于显示或查看某些内容的对话框 一般用非模态对话框 对话框类QDialog 官方文档 http qt project org
  • JAVA实验:发牌程序

    编写程序 项目名和类名均为PokerGame 实现功能如下 1 共有m幅扑克牌 每幅扑克牌不包括大王和小王共52张牌 2 可能有n个人参与扑克游戏 2 lt n lt 52 3 程序运行时输入扑克牌幅数m和人数n 然后所有牌分别依次分发给n
  • 标准方差是方差无偏估计的证明——编辑版

    1 问题描述 假设有一批独立同分布的样本 x i i 1 2
  • 学习Topic Model(主题模型)--Latent Dirichlet Allocation(LDA) 的一些摘要

    主题模型是文本挖掘领域非常流行的方法 在文档分类 聚类中都 有大量的应用 实际上 LDA的训练过程很简单 只需要简单的计算就可以得到结果 Blei 2003 原始的LDA论文中使用的是变分法推导 用EM算法求解 方法比较难以理解 并且EM算
  • 超详细!手把手带你轻松用 MMSegmentation 跑语义分割数据集

    在带你轻松掌握 MMSegmentation 整体构建流程一文中 我们带大家认识了 MMSegmentation 的整体框架 分享了 MMSegmentation 中已经复现的主流语义分割模型 OpenMMLab 超详细 带你轻松掌握 MM
  • Python语法基础刻意练习:Task10(类和对象)

    1 创建和使用类 使用类几乎可以模拟任何东西 下面来编写一个表示小狗的简单类Dog 它表示的不是特定的小狗 而是任何小狗 对于大多数宠物狗 它们都有名字和年龄 我们还知道 大多数小狗还会蹲下和打滚 由于大多数小狗都具备上述两项信息和两种行为
  • LeetCode——027

    27 Remove Element My Submissions QuestionEditorial Solution Total Accepted 112934 Total Submissions 335498 Difficulty Ea
  • 【k8s学习2】二进制文件方式安装 Kubernetes之kubernetesmaster部署

    k8s学习2 二进制文件方式安装 Kubernetes之etcd集群部署 温殿飞的博客 CSDN博客 如果已经完成了etcd的部署 可以按照这个文章继续部署 部署安全的kubernetes master高可用集群 1 下载kubernete