ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kubernetes安装与配置

2022-02-01 00:00:58  阅读:205  来源: 互联网

标签:kubernetes 安装 配置 init systemctl etcd kubeadm config


一、系统要求

软硬件最低配置推荐配置
cpu和内存Master: 至少2核和4GB内存
Node:至少4核和16GB内存Master: 4核和16GB内存
Node: 应根据需要运行的容器数量进行配置
Docker1.9版本以上1.12版本
etcd2.0版本以上3.0版本

单master集群

单个master节点,然后管理多个node节点
在这里插入图片描述

多master集群

多个master节点,管理多个node节点,同时中间多了一个负载均衡的过程
在这里插入图片描述

二、etcd安装(可跳过,使用kubeadm可不用安装etc)

以Centos7为例子,首先关闭防火墙

# 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
# 禁用SELinux,目的让容器可以读取主机文件系统
setenforce 0
# 或者修改系统文件/etc/sysconfig/selinux,将SELINUX=enforcing修改成将SELINUX=disable,然后重启Linux

2.1 etcd yum方式安装

yum install etcd –y
 
vi /etc/etcd/etcd.conf 
 
 
ETCD_NAME="default"
 
ETCD_DATA_DIR="/var/lib/etcd/default"
 
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
 
ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
 
 
systemctl enable etcd
 
systemctl start etcd

2.2 采用etcd二进制安装

etcd github地址:https://github.com/etcd-io/etcd/releases
下载etcd-v3.3.10-linux-amd64.tar.gz 版本
上传到服务器/usr/local/etcd 目录下且解压

# 解压
tar zxvf etcd-v3.3.10-linux-amd64.tar.gz

# 解压后进入目录将etcd、etcdctl二进制文件复制到/usr/bin目录
cp etcd etcdctl /usr/bin/

# 在/etc/systemd/system/目录里创建etcd.service
[Unit] 
Description=etcd.service 
[Service]
Type=notify
TimeoutStartSec=0
Restart=always
WorkingDirectory=/var/lib/etcd
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd 
[Install] 
WantedBy=multi-user.target

#创建配置/etc/etcd/etcd.conf文件
ETCD_NAME=ETCD Server 
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://本机IP:2379"

设置开机启动

systemctl daemon-reload
systemctl enable etcd.service
systemctl start etcd.service

查询是否自启动

systemctl is-enabled etcd.service

关闭开机自启服务

systemctl disable etcd.service

验证是否正确安装

etcdctl cluster-health

查看运行状态

systemctl status etcd.service

在这里插入图片描述

三、使用kubeadm工具快速安装Kubernetes集群

最简单的安装方法是使用yum install kubernetes 命令完成Kubernetes集群的安装,但仍需修改各组件的启动参数,才能完成Kubernetes 集群的配置。整个过程比较复杂,也容易出错,所以先使用基于kubeadm的安装过程。
安装钱准备

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config  
# 临时关闭
setenforce 0  

# 关闭swap
# 临时
swapoff -a 
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 根据规划设置主机名【master节点上操作】
hostnamectl set-hostname k8smaster
# 根据规划设置主机名【node1节点操作】
hostnamectl set-hostname k8snode1


# 将桥接的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  

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

3.1 安装kubeadm和相关工具

首先配置yum源,官方yum源的地址为https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64。如果无法访问官方yum源的地址,则也可以使用国内的一个yum源,地址为http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/,yum源的配置文件vi /etc/yum.repos.d/kubernetes.repo的内容如下:

[kubernetes]name=Kubernetes Respositorybaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=0

然后运行yum install命令安装kubeadm和相关工具:

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

运行下面的命令,启动Docker服务(如果已安装Docker,则无须再次启动)和kubelet服务,并设置为开机自动启动:

systemctl enable docker && systemctl start dockersystemctl enable kubelet && systemctl start kubelet

3.2 kubeadm config(master节点执行)

kubeadm已经进入GA阶段,其控制面初始化和加入节点步骤都支持大量的可定制内容,因此kubeadm还提供了配置文件功能用于复杂定制。同时,kubeadm将配置文件以ConfigMap的形式保存到集群之中,便于后续的查询和升级工作。kubeadm config子命令提供了对这一组功能的支持:

  • kubeadm config upload from-file:由配置文件上传到集群中生成ConfigMap。
  • kubeadm config upload from-flags:由配置参数生成ConfigMap。
  • kubeadm config view:查看当前集群中的配置值。
  • 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,可以取得默认的初始化参数文件:

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

在这里插入图片描述

对生成的文件进行编辑,可以按需生成合适的配置。例如,若需要定制镜像仓库的地址,以及Pod的地址范围,则可以使用如下配置,保存为init-config.yaml:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: v1.18.0
networking:
  podSubnet: 10.100.0.0/16

3.3 下载Kubernetes的相关镜像(master节点执行)

为了从国内的镜像托管站点获得镜像加速支持,建议修改Docker的配置文件,增加RegistryMirror参数,将镜像配置写入配置参数中,例如echo ‘{“registry-mirrors”:[“https://registry.docker-cn.com”]}’ > /etc/docker/daemon.json,然后重启Docker服务。使用config images pull子命令下载所需镜像,例如:

kubeadm config images pull --config=init-config.yaml

在镜像下载完成之后,就可以进行安装了。
在这里插入图片描述

报错:

this version of kubeadm only supports deploying clusters with the control plane version >= 1.22.0. Current version: v1.18.0

报错内容可以看出书中提供的版本太老,不被当前kubeadm支持。

1、查看当前配置中需求的镜像

[root@localhost k8s]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.23.2
k8s.gcr.io/kube-controller-manager:v1.23.2
k8s.gcr.io/kube-scheduler:v1.23.2
k8s.gcr.io/kube-proxy:v1.23.2
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6

2、修改init-config.yaml

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: v1.23.2
networking:
  podSubnet: 10.100.0.0/16

在这里插入图片描述

3.4 运行kubeadm init命令安装Master(master节点执行)

至此,准备工作已就绪,执行kubeadm init命令即可一键安装Kubernetes的Master。接下来使用kubeadm init命令,使用前面创建的配置文件进行集群控制面的初始化:

kubeadm init --config=init-config.yaml

问题:
在这里插入图片描述

出现端口号被占用和/var/lib/etcd is not empty

#查看端口号
netstat -tupln
#停止etcd服务
systemctl stop etcd

#删除文件下的内容
rm -rf /var/lib/etcd

#重启kubeadm
kubeadm reset

在这里插入图片描述

再次kubeadm init --config=init-config.yaml报错。
在这里插入图片描述

cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

systemctl daemon-reload
systemctl restart docker

再去kubeadm init。
Kubernetes的Master安装成功,显示如下信息
按照提示执行下面的命令,复制配置文件到普通用户的home目录下:
在这里插入图片描述

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

这样就在Master上安装了Kubernetes,但在集群内还是没有可用的工作Node,并缺乏对容器网络的配置。这里需要注意kubeadm init命令执行完成后的最后几行提示信息,其中包含加入节点的指令(kubeadm join)和所需的Token。

此时可以用kubectl命令验证在2.2.2节中提到的ConfigMap:

kubectl get -n kube-system configmap

在这里插入图片描述

安装calico网络插件

下载并安装calico
如果我们使用kubectl get nodes会发现status状态为NotReady状态,这是因为我们还没有安装网络插件

wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate

更改calico.yaml,通过命令行:/ 搜索Cluster type to identify the deployment type
:/Cluster type to identify the deployment type

# Cluster type to identify the deployment type
  - name: CLUSTER_TYPE
  value: "k8s,bgp"
# 下方熙增新增
  - name: IP_AUTODETECTION_METHOD
    value: "interface=ens32"
    # ens32为本地网卡名字

应用配置:

kubectl apply -f calico.yaml

3.5 node加入集群(node节点执行)

对于新节点的添加,系统准备和Kubernetes yum源的配置过程是一致的,在Node主机上执行下面的安装过程。
1、安装kubeadm和相关工具:

# 根据规划设置主机名【node1节点操作】
hostnamectl set-hostname k8snode1

#安装kubeadm和相关工具:
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

2、运行下面的命令启动Docker服务与kubelet服务,并将其设置为开机自启动:

systemctl enable docker && systemctl start dockersystemctl enable kubelet && systemctl start kubelet

3、执行kubeadm join 命令,将本Node加入集群:

kubeadm join 192.168.152.173:6443 --token ual2oe.gk2r3mbnc5hxwacz \	--discovery-token-ca-cert-hash sha256:e52bfd0a5551604e368b6ed50ce14f9afd4c3d1366277b6a790b4cfc933255c4

apiServerEndpoint的值来自Master服务器的地址,token和tlsBootstrapToken的值就来自于使用kubeadm init安装Master的最后一行提示信息。如果忘记了token信息和证书信息可使用以下命令查询:

[root@iZ2zeb4qsoj3p5ymi6ksehZ k8s]# kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
ex5byq.j1cy4zn75ufwytu2   23h         2022-01-22T08:32:10Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token

token 24小时失效可使用如下命令重新创建:

kubeadm token create

错误1:如果不加–discovery-token-ca-cert-hash 可能出现以下错误,说明需要进行ca校验可以使用–discovery-token-unsafe-skip-ca-verification参数忽略校验

discovery.bootstrapToken: Invalid value: "": using token-based discovery without caCertHashes can be unsafe. Set unsafeSkipCAVerification to continue
kubeadm join --token ex5byq.j1cy4zn75ufwytu2 39.107.14.61:6443 --discovery-token-unsafe-skip-ca-verification

错误2:
在这里插入图片描述

执行命令:

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

再次加入master节点
在这里插入图片描述

在master查看节点的状态

kubectl get nodes

在这里插入图片描述

3.6 验证Kubernetes集群是否安装完成

执行下面的命令,验证Kubernetes集群的相关Pod是否都正常创建并运行:

kubectl get pods --all-namespaces

如果发现有状态错误的Pod,则可以执行kubectl --namespace=kube-system describe pod <pod_name>来查看错误原因,常见的错误原因是镜像没有下载完成。如果安装失败,则可以执行kubeadm reset命令将主机恢复原状,重新执行kubeadm init命令再次安装(注意在执行 kubeadm reset命令后需要执行rm -rf $HOME/.kube

3.7 测试kubernetes集群

我们都知道K8S是容器化技术,它可以联网去下载镜像,用容器的方式进行启动
在Kubernetes集群中创建一个pod,验证是否正常运行:

# 下载nginx 【会联网拉取nginx镜像】
kubectl create deployment nginx --image=nginx
# 查看状态
kubectl get pod

如果我们出现Running状态的时候,表示已经成功运行了
在这里插入图片描述

下面我们就需要将端口暴露出去,让其它外界能够访问

# 暴露端口kubectl expose deployment nginx --port=80 --type=NodePort# 查看一下对外的端口kubectl get pod,svc

能够看到,我们已经成功暴露了 80端口 到 30608上
在这里插入图片描述

我们到我们的宿主机浏览器上,访问如下地址

http://192.168.152.173:30608/

发现我们的nginx已经成功启动了
在这里插入图片描述

标签:kubernetes,安装,配置,init,systemctl,etcd,kubeadm,config
来源: https://blog.csdn.net/Pluto372/article/details/122702368

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有