ubuntu部署k8s

目录

前言

一. 修改 ubuntu 配置

关闭 swap 内存

配置免密登录

二. 安装 docker

docker 的安装

docker 的配置

三. 安装 k8s

四. 安装 master 节点

初始化 master 节点

配置 kubectl 工具

部署 flannel 网络

五. 将 slave 节点加入网络

默认网卡问题修复

修改 kubelet 默认地址

修改 flannel 的默认网卡

总结

参考


要注意,对于1.24之上的k8s版本,默认使用安装是contained,要使用docker需要另外安装cri

提前安装

apt-get install curl && apt -get install vim


一. 修改 ubuntu 配置

首先,k8s 要求我们的 ubuntu 进行一些符合它要求的配置。

1.关闭 Swap 内存

2.配置免密登录

关闭 swap 内存

 k8s 的较新版本都要求关闭swap,修改/etc/fstab文件:

sudo vi /etc/fstab

把下列内容第二条用#注释掉就好了,第一条别注释了,不然重启之后系统有可能会报file system read-only错误。

UUID=e2048966-750b-4795-a9a2-7b477d6681bf /   ext4    errors=remount-ro 0    1
# /dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

reboot重启,如果top显示如下即成功

ubuntu部署k8s_第1张图片

配置免密登录

k8s 要求 管理节点可以直接免密登录工作节点 的原因是:在集群搭建完成后,管理节点的 kubelet 需要登陆工作节点进行操作。而至于怎么操作很简单,这里就不详提了,可以参见文章 virtualbox 虚拟机组网 的最后一个章节 免密钥登录

二. 安装 docker

docker 是 k8s 的基础,在安装完成之后也需要修改一些配置来适配 k8s ,所以本章分为 docker 的安装docker 的配置 两部分。如果你已经安装并使用了一段时间的 docker 了话,建议使用docker -v查看已安装的 docker 版本,并在 k8s 官网上查询适合该版本的 k8s 进行安装。这一步两台主机都需要进行安装。

docker 的安装

docker 在 ubuntu 的安装上真是再简单不过了,执行如下命令即可,在安装之前请记得把镜像源切换到国内。

sudo apt install docker.io

等安装完成之后使用docker -v来验证 docker是否可用。

docker 的配置

安装完成之后需要进行一些配置,包括 切换docker下载源为国内镜像站 以及 修改cgroups

这个cgroups是啥呢,你可以把它理解成一个进程隔离工具,docker就是用它来实现容器的隔离的。docker 默认使用的是cgroupfs,而 k8s 也用到了一个进程隔离工具systemd,如果使用两个隔离组的话可能会引起异常,所以我们要把 docker 的也改成systemd

这两者都是在/etc/docker/daemon.json里修改的,所以我们一起配置了就好了,首先执行下述命令编辑daemon.json

sudo vim /etc/docker/daemon.json

打开后输入以下内容:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "exec-opts": [ "native.cgroupdriver=systemd" ]
}

然后:wq保存后重启 docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

然后就可以通过docker info | grep Cgroup来查看修改后的 docker cgroup 状态,发现变为systemd即为修改成功。

三. 安装 k8s

安装完了 docker 就可以下载 k8s 的三个主要组件kubeletkubeadm以及kubectl了。这一步两台主机都需要进行安装。先来简单介绍一下这三者:

  • kubelet: k8s 的核心服务
  • kubeadm: 这个是用于快速安装 k8s 的一个集成工具,我们在master1worker1上的 k8s 部署都将使用它来完成。
  • kubectl: k8s 的命令行工具,部署完成之后后续的操作都要用它来执行

其实这三个的下载很简单,直接用apt-get就好了,但是因为某些原因,它们的下载地址不存在了。所以我们需要用国内的镜像站来下载,也很简单,依次执行下面五条命令即可:

# 使得 apt 支持 ssl 传输
apt-get update && apt-get install -y apt-transport-https
# 下载 gpg 密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
# 添加 k8s 镜像源
cat </etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 更新源列表
apt-get update
# 下载 kubectl,kubeadm以及 kubelet
# apt-get install -y kubelet kubeadm kubectl 现在会下载最新版本,最新版使用contained
apt-get install -y kubelet=1.23.6-00 kubeadm=1.23.6-00 kubectl=1.23.6-00

直接在/etc/apt/sources.list里添加https://mirrors.aliyun.com/kubernetes/apt/是不行的,因为这个阿里镜像站使用的ssl进行传输的,所以要先安装apt-transport-https并下载镜像站的密钥才可以进行下载。

四. 安装 master 节点

下载完成后就要迎来重头戏了,初始化master节点,这一章节只需要在管理节点上配置即可,大致可以分为如下几步:

  • 初始化master节点
  • 部署flannel网络
  • 配置kubectl工具

初始化 master 节点

运行下列命令,其中--apiserver-advertise-address参数的 ip 地址修改为自己的master主机地址,然后再执行。

kubeadm init \
--apiserver-advertise-address=192.168.56.11 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16

这里介绍一下一些常用参数的含义:

  • --apiserver-advertise-address: k8s 中的主要服务apiserver的部署地址,填自己的管理节点 ip
  • --image-repository: 拉取的 docker 镜像源,因为初始化的时候kubeadm会去拉 k8s 的很多组件来进行部署,所以需要指定国内镜像源,下不然会拉取不到镜像。
  • --pod-network-cidr: 这个是 k8s 采用的节点网络,因为我们将要使用flannel作为 k8s 的网络,所以这里填10.244.0.0/16就好
  • --kubernetes-version: 这个是用来指定你要部署的 k8s 版本的,一般不用填,不过如果初始化过程中出现了因为版本不对导致的安装错误的话,可以用这个参数手动指定。
  • --ignore-preflight-errors: 忽略初始化时遇到的错误,比如说我想忽略 cpu 数量不够 2 核引起的错误,就可以用--ignore-preflight-errors=CpuNum。错误名称在初始化错误时会给出来。

当你看到如下字样是,就说明初始化成功了,请把最后那行以kubeadm join开头的命令复制下来,之后安装工作节点时要用到的,如果你不慎遗失了该命令,可以在master节点上使用kubeadm token create --print-join-command命令来重新生成一条。

Your Kubernetes master has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
 
You can now join any number of machines by running the following on each node
as root:
 
kubeadm join 192.168.56.11:6443 --token wbryr0.am1n476fgjsno6wa --discovery-token-ca-cert-hash sha256:7640582747efefe7c2d537655e428faa6275dbaff631de37822eb8fd4c054807

如果在初始化过程中出现了任何Error导致初始化终止了,使用kubeadm reset重置之后再重新进行初始化。

配置 kubectl 工具

这一步就比较简单了,直接执行如下命令即可:

mkdir -p /root/.kube && \
cp /etc/kubernetes/admin.conf /root/.kube/config

执行完成后并不会刷新出什么信息,可以通过下面两条命令测试 kubectl是否可用:

# 查看已加入的节点
kubectl get nodes
# 查看集群状态
kubectl get cs

部署 flannel 网络

flannel是什么?它是一个专门为 k8s 设置的网络规划服务,可以让集群中的不同节点主机创建的 docker 容器都具有全集群唯一的虚拟IP地址。想要部署flannel的话直接执行下述命令即可:

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

输出如下内容即为安装完成:

clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

至此,k8s 管理节点部署完成。

五. 将 slave 节点加入网络

首先需要重复步骤 1 ~ 3 来安装 docker 、k8s 以及修改服务器配置,之后执行从步骤 4 中保存的命令即可完成加入,注意,这条命令每个人的都不一样,不要直接复制执行:

kubeadm join 192.168.56.11:6443 --token wbryr0.am1n476fgjsno6wa --discovery-token-ca-cert-hash sha256:7640582747efefe7c2d537655e428faa6275dbaff631de37822eb8fd4c054807

待控制台中输出以下内容后即为加入成功:

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.

随后登录master1查看已加入节点状态,可以看到worker1已加入,并且状态均为就绪。至此,k8s 搭建完成:

root@master1:~# kubectl get nodes
NAME      STATUS   ROLES    AGE    VERSION
master1   Ready    master   145m   v1.15.0
worker1   Ready       87m    v1.15.0

默认网卡问题修复

如果你是使用virtualBox部署的虚拟机,并且虚拟机直接无法使用网卡1的 ip 地址互相访问的话(例如组建双网卡,网卡1为 NAT 地址转换用来上网,网卡2为Host-only,用于虚拟机之间访问)。就需要执行本节的内容来修改 k8s 的默认网卡。不然会出现一些命令无法使用的问题。如果你的默认网卡可以进行虚拟机之间的相互访问,则没有该问题。

修改 kubelet 默认地址

访问kubelet配置文件:

sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

在最后一行ExecStart 之前 添加如下内容:

Environment="KUBELET_EXTRA_ARGS=--node-ip=192.168.56.21"

重启kubelet

systemctl stop kubelet.service && \
systemctl daemon-reload && \
systemctl start kubelet.service

至此修改完成,更多信息详见 kubectl logs、exec、port-forward 执行失败问题解决 。

修改 flannel 的默认网卡

编辑flannel配置文件

sudo kubectl edit daemonset kube-flannel-ds-amd64 -n kube-system

找到spec.template.spec.containers.args字段并添加--iface=网卡名,例如我的网卡是enp0s8

- args:
  - --ip-masq
  - --kube-subnet-mgr
  # 添加到这里
  - --iface=enp0s8

:wq保存修改后输入以下内容删除所有 flannel,k8s 会自动重建:

kubectl delete pod -n kube-system -l app=flannel

至此修改完成,更多内容请见 解决k8s无法通过svc访问其他节点pod的问题 。

总结

至此你应该已经搭建好了一个完整可用的双节点 k8s 集群了。接下来你可以通过如下内容继续深入 k8s,排名分先后,推荐依次阅读:

  • 让你的 k8s 使用更简单
  • k8s 基本使用
  • k8s 如何让你的应用活的更久

参考

  • kubeadm安装Kubernetes 1.14最佳实践
  • Docker中的Cgroup Driver:Cgroupfs 与 Systemd
  • Ubuntu16.04搭建Kubernetes
  • Flannel介绍
  • k8s 官方文档


 

你可能感兴趣的:(ubuntu,docker,linux)