FeelingLife FeelingLife
首页
  • Go

    • Go基础知识
  • Python

    • Python进阶
  • 操作系统
  • 计算机网络
  • MySQL
  • 学习笔记
  • 常用到的算法
  • Docker
  • Kubernetes
  • Observability
  • 容器底层
其他技术
  • 友情链接
  • 收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xuqil

一介帆夫
首页
  • Go

    • Go基础知识
  • Python

    • Python进阶
  • 操作系统
  • 计算机网络
  • MySQL
  • 学习笔记
  • 常用到的算法
  • Docker
  • Kubernetes
  • Observability
  • 容器底层
其他技术
  • 友情链接
  • 收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 环境搭建

    • Kubernetes 搭建
      • 安装列表
      • 前置条件
        • 基础配置
        • docker安装
      • 使用kubeadm工具安装kubernetes
        • 安装kubeadm
        • 修改kubeadm的默认配置
        • 下载Kubernetes的相关镜像
        • 运行kubeadm init命令安装Master节点
        • 检查各组件
      • 安装网络创建Calio
  • 《Kubernetes》
  • 环境搭建
xuqil
2023-03-25
目录

Kubernetes 搭建

# 安装kubernetes

# 安装列表

docker-ce-19.03.9-3.el7
kubelet-1.19.0 
kubeadm-1.19.0  
kubectl-1.19.0
1
2
3
4

# 前置条件

# 基础配置

主机节点:

IP:  192.168.122.120     主机名:k8s-master    系统: centos 7.6      配置: 4C 4G
IP:  192.168.122.121     主机名:k8s-node1     系统: centos 7.6      配置: 2C 2G
IP:  192.168.122.122     主机名:k8s-node2     系统: centos 7.6      配置: 2C 2G
1
2
3

以下条件所有节点都要执行:

  1. 配置yum源:使用国内yum源即可。

    1. 配置yum源:

      yum install -y wget vim
      mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo 
      
      1
      2
      3
      4
    2. 配置kubernetes源

      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
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
    3. 配置docker源

      wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
      
      1
    4. 清理cache

      yum clean all && yum makecache fast -y
      
      1
  2. 关闭防火墙:

    systemctl disable firewalld
    systemctl stop firewalld
    
    1
    2
  3. 在主机上禁用SELinux(修改文件/etc/sysconfig/selinux,将SELINUX=enforcing修改为SELINUX=disabled),让容器可以读取主机文件系统。

    sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
    
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    setenforce 0
    
    1
    2
    3
    4
    5
  4. 关闭swap系统交换区:

    sed -i 's/.*swap.*/#&/' /etc/fstab
    swapoff -a
    
    1
    2
  5. 添加主机名与IP对应关系

    cat >> /etc/hosts << EOF
    192.168.122.120 k8s-master
    192.168.122.121 k8s-node1
    192.168.122.122 k8s-node2
    192.168.122.120 cluster-endpoint
    EOF
    
    1
    2
    3
    4
    5
    6
  6. 设置主机名(分别在不同的主机执行)

    #设置 192.168.122.120主机主机名
    hostnamectl set-hostname  k8s-master
    
    #设置 192.168.122.121主机主机名
    hostnamectl set-hostname  k8s-node1
    
    #设置 192.168.122.122主机主机名
    hostnamectl set-hostname  k8s-node2
    
    1
    2
    3
    4
    5
    6
    7
    8
  7. 将桥接的IPv4流量传递到iptables的链

    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    
    sysctl --system
    
    1
    2
    3
    4
    5
    6
    7
  8. 然后重启主机:

    shutdown -r now
    
    1
  9. 使用命令getenforce验证SELinux状态。

    [root@k8s-master1 ~]# getenforce
    Disabled
    
    1
    2

# docker安装

  1. 安装docker

    # 列举docker版本
    # yum list docker-ce --showduplicates | sort -r 
    yum install -y docker-ce-19.03.11 docker-ce-cli-19.03.11 containerd.io-1.2.13
    systemctl enable docker && systemctl start docker
    
    1
    2
    3
    4
  2. 配置国内镜像

    echo '{"registry-mirrors":["https://registry.dodcker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"]}'>/etc/docker/daemon.json
    
    1
  3. 重启docker

    systemctl daemon-reload
    systemctl restart docker
    
    1
    2

# 使用kubeadm工具安装kubernetes

# 安装kubeadm

执行命令:

yum install -y kubelet-1.19.0 kubeadm-1.19.0  kubectl-1.19.0  --disableexcludes=kubernetes
systemctl enable kubelet  && systemctl start kubelet 
1
2

# 修改kubeadm的默认配置

kubeadm的初始化控制平面(init)命令和加入节点(join)命令均可以通过指定的配置文件修改默认参数的值。kubeadm将配置文件以ConfigMap形式保存到集群中,便于后续的查询和升级工作。kubeadm config子命令提供了对这组功能的支持。

  • kubeadm config print init-defaults:输出kubeadm init命令默认参数的内容。
  • kubeadm config print join-defaults:输出kubeadm join命令默认参数的内容。
  • kubeadm config migrate:在新旧版本之间进行配置转换。
  • kubeadm config images list:列出所需的镜像列表。
  • kubeadm config images pull:拉取镜像到本地。

例如,运行kubeadm config print init-defaults命令,可以获得默认的初始化参数文件:

[root@k8s-master ~]# kubeadm config print init-defaults > ini.default.yaml
1

对生成的文件进行编辑,可以按需生成合适的配置。例如,若需要自定义镜像的仓库地址、需要安装的Kubernetes版本号及Pod的IP地址范围,则可以将默认配置修改如下:

apiVersion: kubeadm.k8s.io/v1beta2
...
imageRepository: k8s.gcr.io  #镜像的仓库地址
kind: ClusterConfiguration
kubernetesVersion: v1.19.0  #Kubernetes版本号
networking:
  podSubnet: 192.168.0.0/16  #Pod的IP地址范围
1
2
3
4
5
6
7

将上面的内容保存为init-config.yaml备用:

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: 1.2.3.4
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  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: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.19.0
networking:
  podSubnet: 192.168.0.0/16
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# 下载Kubernetes的相关镜像

为了加快kubeadm创建集群的过程,可以预先将所需镜像下载完成。可以通过kubeadm config images list命令查看镜像列表,例如:

[root@k8s-master ~]# kubeadm config images list --config=init-config.yaml
I1031 03:54:59.572699   14132 version.go:252] remote version is much newer: v1.22.3; falling back to: stable-1.19
W1031 03:55:01.211175   14132 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
k8s.gcr.io/kube-apiserver:v1.19.0
k8s.gcr.io/kube-controller-manager:v1.19.0
k8s.gcr.io/kube-scheduler:v1.19.0
k8s.gcr.io/kube-proxy:v1.19.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.9-1
k8s.gcr.io/coredns:1.7.0
1
2
3
4
5
6
7
8
9
10

如果无法访问k8s.gcr.io,则可以使用国内镜像托管站点进行下载,例如https://registry.dodcker-cn.com,这可以通过修改Docker服务的配置文件(默认为/etc/docker/daemon.json)进行设置,例如:

{"registry-mirrors":["https://registry.dodcker-cn.com"]}
1

然后,使用kubeadm config images pull命令或者docker pull命令下载上述镜像,例如:

[root@k8s-master ~]# kubeadm config images pull --config=init-config.yaml
1

这里使用docker pull下载相关镜像,下载成功后通过docker tag命令修改镜像的标签:

提示: gcr.io项目对应的阿里镜像:http://registry.aliyuncs.com/google_containers,gcr.io项目docker对应的镜像源:http://docker.io/mirrorgooglecontainers和http://docker.io/google_containers

如果将imageRepository: k8s.gcr.io改为imageRepository: registry.aliyuncs.com/google_container则不需要修改镜像标签

#下载镜像
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.19.0
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.19.0
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.19.0
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.19.0
docker pull registry.aliyuncs.com/google_containers/pause:3.2
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.9-1
docker pull registry.aliyuncs.com/google_containers/coredns:1.7.0

#修改镜像标签
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.19.0 k8s.gcr.io/kube-apiserver:v1.19.0
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.19.0 k8s.gcr.io/kube-controller-manager:v1.19.0
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.19.0 k8s.gcr.io/kube-scheduler:v1.19.0
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.19.0 k8s.gcr.io/kube-proxy:v1.19.0
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.9-1 k8s.gcr.io/etcd:3.4.9-1
docker tag registry.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0

#删除旧镜像
docker rmi registry.aliyuncs.com/google_containers/kube-apiserver:v1.19.0
docker rmi registry.aliyuncs.com/google_containers/kube-controller-manager:v1.19.0
docker rmi registry.aliyuncs.com/google_containers/kube-scheduler:v1.19.0
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.19.0
docker rmi registry.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.9-1
docker rmi registry.aliyuncs.com/google_containers/coredns:1.7.0

#保存镜像
docker save -o  ./k8s1.19.0-images.tar k8s.gcr.io/kube-apiserver:v1.19.0 k8s.gcr.io/kube-controller-manager:v1.19.0 k8s.gcr.io/kube-scheduler:v1.19.0 k8s.gcr.io/kube-proxy:v1.19.0 k8s.gcr.io/pause:3.2 k8s.gcr.io/etcd:3.4.9-1 k8s.gcr.io/coredns:1.7.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 运行kubeadm init命令安装Master节点

此,准备工作已经就绪,运行kubeadm init命令即可一键安装Kubernetes的Master节点,也称之为Kubernetes控制平面(Control Plane)。

在开始之前需要注意:kubeadm的安装过程不涉及网络插件(CNI)的初始化,因此kubeadm初步安装完成的集群不具备网络功能,任何Pod(包括自带的CoreDNS)都无法正常工作。而网络插件的安装往往对kubeadm init命令的参数有一定要求。例如,安装Calico插件时需要指定--pod-network-cidr=192.168.0.0/16。关于安装CNI网络插件的更多内容,可参考官方文档的说明。

kubeadm init命令在执行具体的安装操作之前,会执行一系列被称为pre-flight checks的系统预检查,以确保主机环境符合安装要求,如果检查失败就直接终止,不再进行init操作。用户可以通过kubeadm init phase preflight命令执行预检查操作,确保系统就绪后再执行init操作。如果不希望执行预检查,则也可以为kubeadm init命令添加--ignore-preflight-errors参数进行关闭。

Kubernetes默认设置cgroup驱动(cgroupdriver)为“systemd”,而Docker服务的cgroup驱动默认值为“cgroupfs”,建议将其修改为“systemd”,与Kubernetes保持一致。这可以通过修改Docker服务的配置文件(默认为/etc/docker/daemon.json)进行设置:

{
    "exec-opts": ["native.cgroupdriver=systemd"],
    ...
}
1
2
3
4

然后执行:

systemctl daemon-reload
systemctl restart docker
1
2

准备工作就绪之后,就可以运行kubeadm init命令,使用之前创建的配置文件一键安装Master节点(控制平面)了:

kubeadm init --config=init-config.yaml
#sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.0 --apiserver-advertise-address 192.168.122.120 --pod-network-cidr=192.168.0.0/16 --token-ttl 0 --control-plane-endpoint cluster-endpoint
1
2

看到“Your Kubernetes control-plane has initialized successfully!”的提示,就说明Master节点(控制平面)已经安装成功了。

接下来就可以通过kubectl命令行工具访问集群进行操作了**。由于kubeadm默认使用CA证书,所以需要为kubectl配置证书才能访问Master。**

按照安装成功的提示,非root用户可以将admin.conf配置文件复制到HOME目录的.kube子目录下,命令如下:


1

如果用户是root,则也可以通过设置环境变量KUBECONFIG完成kubectl的配置:

然后就可以使用kubectl命令行工具对Kubernetes集群进行访问和操作了。

到此,Kubernetes的Master节点已经可以工作了,但在集群内还是没有可用的Worker Node,并缺乏容器网络的配置。

接下来安装Worker Node,需要用到kubeadm init命令运行完成后的最后几行提示信息,其中包含将节点加入集群的命令(kubeadm join)和所需的Token。

# 检查各组件

[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                       ERROR
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
etcd-0               Healthy     {"health":"true"}

1
2
3
4
5
6
7

遇到dial tcp 127.0.0.1:10252: connect: connection refused问题。

解决方式:

是/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml的port为0导致的,需要将它注释掉。

spec:
  containers:
  - command:
    - kube-scheduler
    - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
    - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
    - --bind-address=127.0.0.1
    - --kubeconfig=/etc/kubernetes/scheduler.conf
    - --leader-elect=true
    #- --port=0

1
2
3
4
5
6
7
8
9
10
11

重新查看

[root@k8s-master manifests]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   {"health":"true"}

1
2
3
4
5
6
7

# 安装网络创建Calio

https://kuboard.cn/install-script/calico/calico-3.13.1.yam

上次更新: 2024/05/29, 06:25:22
最近更新
01
VXLAN互通实验
05-13
02
VXLAN
05-13
03
VLAN
05-13
更多文章>
Theme by Vdoing | Copyright © 2018-2025 FeelingLife | 粤ICP备2022093535号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式