美文网首页Kubernetes
Debian10部署Kubernetes1.20.5

Debian10部署Kubernetes1.20.5

作者: 赵小栋 | 来源:发表于2021-03-24 15:28 被阅读0次

一、简介

Kubernetes(简称K8S)只有管理节点与工作节点两种类型。管理节点主要负责K8S集群管理、集群中各节点间的信息交互、任务调度,还负责容器、Pod、NameSpaces、PV等生命周期的管理。工作节点主要为容器和Pod提供计算资源、Pod及容器全部运行在工作节点上,工作节点通过kubelet服务与管理节点通信以管理容器的生命周期。并与集群其他节点进行通信。


clipboard.png

二、环境准备

Kubernetes支持在物理服务器或虚拟机上运行,本次实验基于虚拟机方式准备测试环境,Debian10操作系统,Kubeadm方式部署,配置信息如表所示:

注:本实验环境使用root用户安装,如非root用户请注意sudo权限。

IP地址 节点角色 CPU Memory Hostname
192.168.148.145 Master 2C 4G master
192.168.148.146 node01 2C 4G node01
192.168.148.147 node02 2C 4G node02
1、修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02

在所有节点进行如下操作:

2、编辑/etc/hosts文件,添加域名解析
cat <<EOF >>/etc/hosts
> 192.168.148.145  master
> 192.168.148.146  node01
> 192.168.148.147  node02
> EOF
3、关闭防火墙,seLinux和swap

Debian10最小化安装后默认未开启防火墙和seLinux,如有开启的,关闭即可。

#关闭swap
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
4、配置内核参数,将桥接的IPV4流量传递到iptalbes的链

确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter。

为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
5、配置国内Kubernetes源
#添加Kubernetes源
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

#添加Kubernetes的key
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

#更新索引文件
apt update

三、软件安装

在所有节点上进行下面操作

1、安装Docker

如果曾安装过docker,先删除:

apt-get remove docker docker-engine docker.io

安装依赖:

apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

添加Docker的GPG公钥:

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

添加docker软件仓库:

add-apt-repository \
   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
   $(lsb_release -cs) \
   stable"

最后安装:

apt-get update
apt-get install docker-ce

安装指定的Docker版本

1、列出仓库存在的版本信息:

apt-cache madison docker-ce

2、安装指定版本,<VERSION_STRING> 替换为实际的版本号,比如:5:19.03.153-0debian-buster

apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

配置Docker镜像加速

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://0baivyia.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

设置Docker开机启动

systemctl enable docker

修改 Docker Cgroup Driver 为 systemd

Docker 在默认情况下使用的 Cgroup Driver 为 cgroupfs,而 Kubernetes 其实推荐使用 systemd 来代替 cgroupfs,修改Docker 的 Cgroup Driver为systemd:

vim /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

由于前面我们已经在damon.json配置文件里添加了Docker镜像加速器,所以,我们只需把 "exec-opts": ["native.cgroupdriver=systemd"] 增加到配置文件即可,以逗号分隔,格式如下:

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

#重新加载Docker配置文件
systemctl daemon-reload
systemctl restart docker

使用docker info命令查看docker Cgroup Driver已变为了systemd:

root@master:~# docker info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.15
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: systemd
2、安装kubeadm、kubectl、kubelet
apt-get install kubeadm kubectl kubelet
systemctl start kubelet
systemctl enable kubelet

kubelet: 负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
kubeadm: 是kubernets的自动化部署工具,降低了部署难度,提高效率。
kubectl: 是kubernetes集群管理工具

四、初始化Master节点

以下操作只在master节点进行

1、在master节点上进行kubernetes集群初始化

kubeadm init --kubernetes-version=1.20.5 \
> --apiserver-advertise-address=192.168.148.145 \
> --image-repository registry.aliyuncs.com/google_containers \
> --service-cidr=10.1.0.0/16 \
> --pod-network-cidr=10.244.0.0/16

定义Pod网段为10.244.0.0/16,api server地址就是master本机IP地址。

由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过--image-repository制定阿里云镜像仓库地址。

集群初始化完成后返回如下信息,按照提示配置kubectl工具,并记录生成的最后join内容,此内容需要在node节点加入kubernetes集群时执行

#配置kubectl工具
  mkdir -p $HOME/.kube
  cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  chown $(id -u):$(id -g) $HOME/.kube/config
 
#保留此join内容
kubeadm join 192.168.148.145:6443 --token vki75s.swdwgsq1d5ptwhmx \
    --discovery-token-ca-cert-hash sha256:f93b1c85e4646b9793d2a7cf52e4e84f3fea812e39ce544ae259f696f77e276b

2、部署flannel网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

3、flannel网络部署完成后查看集群状态

kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   27m   v1.20.5

master节点为Ready状态,接下来开始部署node节点

五、部署node节点

以下操作在node节点进行

在所有node节点执行之前记录的join命令,使所有node节点加入Kubernetes集群:

kubeadm join 192.168.148.145:6443 --token vki75s.swdwgsq1d5ptwhmx \
    --discovery-token-ca-cert-hash sha256:f93b1c85e4646b9793d2a7cf52e4e84f3fea812e39ce544ae259f696f77e276b

在master节点查看所有节点状态:

kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   31m   v1.20.5
node01   Ready    <none>                 57s   v1.20.5
node02   Ready    <none>                 53s   v1.20.5

集群STATUS状态为Ready时,则说明集群状态正常。

相关文章

网友评论

    本文标题:Debian10部署Kubernetes1.20.5

    本文链接:https://www.haomeiwen.com/subject/kmlhhltx.html