k8s单master集群在线安装

 

说明:此文章基于对k8s集群相关组件已有一定了解,此安装方式采用的是k8s官方安装工具kubeadm安装,并且安装机器基于红帽系系统centos 7 版本为例,本教程安装为docker的19.03.9,k8s的1.19.0版本

k8s高可用多master集群安装请参考我的下一篇博文

k8s多master集群在线安装_玖〇后大叔的博客-CSDN博客

假设我们有三台机器host-01,host-02,host-03,内网ip为192.168.0.1,192.168.0.2,192.168.0.3

规划为host-01为集群master机器,host-02,host-03为集群node机器

1. 分别设置三台机器/etc/hosts文件,加入三台机器的ip映射

192.168.0.1 host-01

192.168.0.2 host-02

192.168.0.3 host-03

2. 禁用系统的交换空间(kubelet启动会检查是否启动了交换空间,如有会启动报错)

swapoff -a

3.添加阿里外网yum基础安装源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
 

执行 yum clean all && yum repolist 缓存安装源信息

4.安装基础软件

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vimnet-tools git iptables-services

5. 关闭防火墙以及启动iptables服务

systemctl disable firewalld --now && systemctl enable iptables && iptables -F && service iptables save

6.关闭selinux

临时关闭:setenforce 0

永久关闭:编辑/etc/selinux/config文件,修改SELINUX为disabled

7. 设置系统内核参数

cat > /etc/sysctl.d/kubernetes.conf << EOF

net.bridge.bridge-nf-call-iptables=1  #ipv4流量转给iptable链

net.bridge.bridge-nf-call-ip6tables=1  #ipv6流量转给iptable链

net.ipv4.ip_forward=1 #开启内核路由转发

net.ipv4.tcp_tw_recycle=0

vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它

vm.overcommit_memory=1 # 不检查物理内存是否够用

vm.panic_on_oom=0 # 开启 OOM

fs.inotify.max_user_instances=8192

fs.inotify.max_user_watches=1048576

fs.file-max=52706963

fs.nr_open=52706963

net.ipv6.conf.all.disable_ipv6=1

net.netfilter.nf_conntrack_max=2310720

EOF

执行 sysctl -p /etc/sysctl.d/kubernetes.conf 使参数生效

8. 调整系统时区

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

如果对时间同步有更高要求可配置阿里ntp 服务器,步骤如下:

(1)yum install -t ntpdate

(2)ntpdate ntp.aliyun.com

(3)编辑定时任务每五分钟进行一次时间同步

crontab -e 

*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >> /var/log/ntpdate.log

9. 打开内核ipvs相关模块

cat > /etc/sysconfig/modules/ipvs.modules <<EOF

#!/bin/bash

modprobe ip_vs

modprobe ip_vs_rr

modprobe ip_vs_wrr

modprobe ip_vs_sh

modprobe nf_conntrack_ipv4

EOF

执行以下步骤确认生效:

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

10. 安装docker(在线安装和离线安装)

注意docker安装版本和k8s版本之间依赖关系可从k8s开源仓库如下位置获取,以为k8s1.9版本为例

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md#external-dependencies

在线安装:

(1)安装一些必要的系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

(2)添加阿里docker安装yum源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)修改yum源配置文件中相关地址(阿里更换了地址)

sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

(4)更新yum源并且执行安装docker

yum makecache fast

查看yum源中docker引擎的版本,选择需要安装的版本

yum list docker-ce.x86_64 --showduplicates | sort -r

注意:docker的安装基于系统底层cpu架构,如果选定版本安装,需明确系统的cpu架构,可执行arch命令查看,如果为arm64架构,查看yum源中docker引擎的版本,应该为 yum list docker-ce.arm64 --showduplicates | sort -r,当我们不安装指定版本docker直接yum install -y docker-ce 会安装最新的版本的docker,并且yum源配置文件中可以利用yum获取到系统cpu架构并安装正确

查看版本输出如下:

Loading mirror speeds from cached hostfile
Loaded plugins: branch, fastestmirror, langpacks
docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable

安装指定版本: yum install -y docker-ce-19.03.9.ce-1.el7.centos

(5)启动docker服务

systemctl enable docker --now

离线安装:

(1)docker官网下载离线安装包,同样注意系统的cpu架构,下载相应的安装包

https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

https://download.docker.com/linux/static/stable/aarch64/docker-19.03.9.tgz

将安装宝上传至服务器 解压 tar -zxvf docker-19.03.9.tgz 会得到一个docker目录,将docker目录下的二进制文件移动至系统PATH环境变量目录下,例如

mv docker/* /usr/bin

(2) 编辑系统systemd  docker服务管理文件

vi /etc/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

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

#注意此更换为实际移动目录

ExecStart=/usr/bin/dockerd 

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

(3)启动docker服务

systemctl enable docker --now

11. 修改docker配置,重启docker服务

cat > /etc/docker/daemon.json <<EOF

{

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

"log-driver": "json-file",

"graph":"/data/docker", 注意磁盘划分,设置docker家目录,默认在/var/lib/docker目录

"log-opts": {

"max-size": "100m"

}

}

重启docker服务:

systemctl daemon-reload && systemctl restart docker 

检查配置是否生效:

docker version

docker info 

12. 安装kubeadm kubectl 以及kubelet,此三个组件版本最好一致,可以选择具体版本安装,注意和docker的版本依赖

添加阿里安装源:

cat << EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

执行yum repolist 缓存仓库包信息

查看已有版本信息:

yum list kubeadm --showduplicates | sort -n

安装指定版本:

yum -y install kubeadm-1.19.1 kubectl-1.19.1 kubelet-1.19.1(可以更换版本)

注:如何更换kubeadm版本

yum list installed | grep kube

yum remove kubeadm kubectl kubelet -y

yum install -y kubelet-1.19.1 kubeadm-1.19.1 kubectl-1.19.1(版本随意)

将 Container Runtime、kubelet 配置成使用 systemd 来作为 cgroup 驱动

修改 /etc/sysconfig/kubelet 文件的KUBELET_EXTRA_ARGS参数

#vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS=--cgroup-driver=systemd

启动kubelet服务:

systemctl enable kubelet --now

以上步骤在三台机器都需执行,至此安装k8s集群的前置条件已经具备,下面安装k8s集群

1. 在master node-01 生成安装集群的配置文件

kubeadm config print init-defaults > kubeadm-config.yaml

2. 修改相关配置项

apiVersion: kubeadm.k8s.io/v1beta2

bootstrapTokens:

- groups:

- system:bootstrappers:kubeadm:default-node-token

token: abcdef.0123456789abcdef

ttl: 24h0m0s

usages:

- signing

- authentication

kind: InitConfiguration

localAPIEndpoint:

advertiseAddress: 192.168.0.205 主节点ip

bindPort: 6443

nodeRegistration:

criSocket: /var/run/dockershim.sock

name: node-01 此处可以设置为hostname,生成配置文件kubeadm会识别hostname,并且填充此处

taints:

- effect: NoSchedule 

key: node-role.kubernetes.io/master

---

apiServer:

timeoutForControlPlane: 4m0s

apiVersion: kubeadm.k8s.io/v1beta2

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controllerManager: {}

dns:

type: CoreDNS

etcd:

local:

dataDir: /data/etcd etcd数据目录,默认为生成为/var/lib/etcd

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers 安装集群拉去镜像的镜像仓库,改为阿里国内镜像仓库,阿里仓库同步的谷歌仓库,国内仓库下载速度较快

kind: ClusterConfiguration

kubernetesVersion: v1.19.0 集群版本和kubectl在同一个大版本下的小版本最好前后不要相差2个小版本,比如kubectl 安装的为1.19.0,此处最大可为1.19.1,防止后续有一些不兼容的地方,k8s官方文档有说明

networking:

dnsDomain: cluster.local

serviceSubnet: 10.96.0.0/12 service网段地址,注意和已有内网网段区分

podSubnet: 10.244.0.0/16 pod地址网段,注意和已有内网网段区分

scheduler: {}

#####以下内容配置文件中没有,如果service到集群pod的负载均衡配制成走内核ipvs,可添加如下配置,默认走的iptable负载均衡

---

apiVersion: kubeproxy.config.k8s.io/v1alpha1

kind: KubeProxyConfiguration

featureGates:

SupportIPVSProxyMode: true

mode: ipvs

3.  预先下载镜像

查看需要下载的镜像列表:

kubeadm config images list --config kubeadm-config.yaml

查看其他k8s版本需要下载的镜像列表:

kubeadm config images list --kubernetes-version=v1.22.1

k8s.gcr.io/kube-apiserver:v1.22.1

k8s.gcr.io/kube-controller-manager:v1.22.1 一般只有以上这四个镜像版本会跟随k8s 版本变更

k8s.gcr.io/kube-scheduler:v1.22.1

k8s.gcr.io/kube-proxy:v1.22.1

k8s.gcr.io/pause:3.2

k8s.gcr.io/etcd:3.4.13-0

k8s.gcr.io/coredns:1.7.0

预先下载镜像:

kubeadm config images pull --config kubeadm-config.yaml

4. 初始化主节点

kubeadm init --config=kubeadm-config.yaml | tee kubeadm-init.log

注意观察屏幕的安装日志,初始化成功后注意屏幕输出信息:

(1).会显示如下的信息 按步执行,这样kubectl工具便可以操作集群和查看集群信息了

mkdir -p $HOME/.kube

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

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

(2).会显示加入到master的命令,保存下来,拿到node-02,node-03节点执行

kubeadm join 192.168.137.10:6443 --token abcdef.0123456789abcdef 

–discovery-token-ca-cert-hash sha256:028fc1e2a324415e0c96895c1f5d74b91c61576c2bc574fe4199d531de3a46cd

master节点和node节点都执行成功后在master分别执行:

kubectl get nodes

kubectl get pods -n kube-system -o wide

会发现所有节点的状态都是NotReady,同时coredns pod运行状态为pending 因为没有安装网络插件,集群之间的node没法相互通信

注:如果在node节点也需要使用kubectl来操作集群,只需要将master的kubectl使用的配置文件/root/.kube/config   scp至node节点相对应位置(为用户的$HOME/.kube/config)即可

5.安装网络插件

k8s集群的网络插件官方不提供,均为第三方开发并且开源,我们这里选用flannel插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

执行安装网络插件

kubectl apply -f kube-flannel.yaml 注意如果pod ip网段更换,文件中网段也需要更换,否则k8s集群中的pod 无法出网与外界通信

等待k8s 把 pod:flannel生效 可以用命令查看状态进度:

kubectl get pods -n kube-system

等待所有组件显示running后,执行kubectl get node,显示所有node均为ready后,那么恭喜你,你的集群安装成功了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes(简称K8s)是一个容器编排平台,支持多master节点的部署可以提高系统的高可用性和容错能力。以下是一个简的步骤,用于在Kubernetes中部署多个master节点: 1. 安装和配置操作系统:确保所有的master节点上都安装了相同版本的操作系统,并进行基本的网络配置。 2. 安装Docker:在所有的master节点上安装Docker,并启动Docker服务。 3. 安装Kubernetes组件:在所有的master节点上安装Kubernetes组件,包括kube-apiserver、kube-controller-manager、kube-scheduler和etcd等。 4. 配置etcd集群:将所有的master节点配置为etcd集群的一部分,确保它们能够互相通信和同步数据。 5. 配置kube-apiserver高可用:将所有的master节点配置为kube-apiserver的后端,使用负载均衡器或者DNS解析来实现请求的负载均衡。 6. 配置kube-controller-manager和kube-scheduler:在所有的master节点上配置kube-controller-manager和kube-scheduler,确保它们能够正确地协调和调度集群中的任务。 7. 配置网络插件:选择并配置适合你的集群的网络插件,以便容器之间可以进行通信和网络互通。 8. 测试集群:使用kubectl命令行工具连接到集群,并进行一系列的测试,确保所有的master节点都正常工作,并且集群的高可用性和容错能力得到了提升。 请注意,这只是一个简的步骤概述,实际部署过程可能会因为不同的操作系统、Kubernetes版本和网络插件而有所不同。建议参考Kubernetes官方文档和相关的部署指南进行详细的配置和安装

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值