K8s需要全程在root用户下进行操作,因此需要先切换到root用户下:

sudo su

安装K8s一般使用kubeadm,官方文档:
kubeadm官方文档

按照官方文档进行安装

准备开始

这是官方文档的要求,最重要的一点在最后:

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器- 的发行版提供通用的指令。
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。
    CPU 2 核心及以上。
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
  • 开启机器上的某些端口。
  • 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。
    这里需要用到的命令是:
    swapoff -a
    
    但是重启机器后会失效,如果需要永久关闭需要编辑文件
    vi /etc/fstab
    
    在里面注释掉最后一行(应该有swap字样,大概长这样/dev/mapper/cl-swap swap swap defaults 0 0),如果不含swap那就还是别乱注释,每次开机运行上面的命令关一下吧。

安装容器运行时

这一步以前一直是安装docker.io,但是在k8s 1.24版本以上不再支持Dockershim,具体文章如下:
移除Dockershim的通知

容器运行时的官方文档

根据官方文档,我们安装containerd

K8s官方文档中写道:按照开始使用 containerd的说明进行操作。 这又转到了containerd的官方文档,可以看到Option2方法是从apt-get下载
containerd官方文档
而这里他说containerd包是分发在Docker源上面的,所以我们要点击下面的Ubuntu进入Docker官网看怎么给Ubuntu配置Docker源。

首先卸载原来的包

 sudo apt-get remove docker docker-engine docker.io containerd runc

然后给我们的apt配置docker的仓库,首先安装依赖

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

信任 Docker 的 GPG 公钥:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

添加软件仓库: (这里使用清华源

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新apt

sudo apt-get update

现在就可以安装containerd了

sudo apt install containerd.io

安装完成后,如果生成了/etc/containerd/config.toml文件,就说明安装好了,可以回到k8s的官方文档了,里面写的是“创建有效的配置文件 config.toml 后返回此步骤。”

我们可以看k8s官方安装containerd的教程

我们需要生成有效的containerd配置文件,下面的命令可以自动生成一套默认配置:

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

配置 systemd cgroup 驱动

官方文档中写道:结合 runc 使用 systemd cgroup 驱动,在 /etc/containerd/config.toml 中设置:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true 

我们使用命令

vim /etc/containerd/config.toml

然后找上面这一段,大概在第125行,改为true
修改驱动

配置registry.mirrors为阿里云镜像,大概在153行:

        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]      
          endpoint = ["https://bqr1dr1n.mirror.aliyuncs.com"]      
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]      
          endpoint = ["https://registry.aliyuncs.com/k8sxio"] 

效果如下
配置阿里云镜像
更改sandbox_image:(这个命令是出去以后直接运行)

sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml 

最后重启服务

systemctl restart containerd

至此containerd就安装完成了

安装 kubeadm、kubelet 和 kubectl

apt官方库中是没有K8s的,需要在apt中添加K8s的源

可以看官方文档,官方文档中给出的安装命令如下,但是因为网络原因我们不用:

# 请不要使用这段代码,因为国内网络原因可能卡住。
# sudo apt-get update && sudo apt-get install -y apt-transport-https
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
# echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
# sudo apt-get update
# sudo apt-get install -y kubectl

官方文档在国内网络环境下并不适用,请使用以下代码:

第一步是apt安装https包

sudo apt-get update && sudo apt-get install -y apt-transport-https

但是,由于国内网络原因,不一定能连接Google,很可能第二步会卡死。

这里也可以使用阿里云的镜像,把第二步的命令改为:

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

然后运行:这一步是给apt的源里面添加k8s的阿里源,就能在apt中安装k8s了

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

修改完这个list文件后,更新一下apt-get的配置

apt-get update

下面这句就是安装kubelet,kubeadm,kubectl三个k8s的核心组件,默认安装最新版

# 如果需要指定版本,使用下一段的命令,此命令是默认安装最新版,我们需要安装1.22版本
不要用 apt install -y kubelet kubeadm kubectl

如果需要指定老版本,可以通过=<版本号>来指定版本,比如有人指定我要安装1.22版本,但1.22里面也有很多小版本,使用下面的命令查看1.22有哪些小版本

apt-cache madison kubectl

1.22的小版本

可以看到1.22的最终版是1.22.15-00,所以用下面的命令安装

apt install kubeadm=1.22.15-00 kubectl=1.22.15-00 kubelet=1.22.15-00

初始化集群

安装完成后,使用kubeadm初始化K8s集群master,配置 kubeadm 初始化文件,可以通过如下命令导出默认的初始化配置:

kubeadm config print init-defaults > kubeadm.yaml

然后修改其中一些参数:

vim kubeadm.yaml

内容如下:

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.31.218      # 修改为自己的ip
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/containerd/containerd.sock        # 修改为containerd的socket
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers        # 修改为阿里云镜像
kind: ClusterConfiguration
kubernetesVersion: 1.22.15       # 要安装的版本号
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16      # 和即将要安装的网络插件有关
scheduler: {}
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd   # 配置驱动为systemd

然后用上面的配置文件进行初始化:

kubeadm init --config=kubeadm.yaml

运行时会拉取镜像,可能要多等一会儿,最终结果如下:
运行结果
注意最后两行是告诉你Worker节点如何加入集群,要记住这条命令,把他复制出来放在记事本之类的地方。

按照上面说的,如果是root用户,要运行

export KUBECONFIG=/etc/kubernetes/admin.conf

同时也要运行

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

才能用kubectl命令,如果想不在root时,在普通用户下也运行kubectl,可以exit退出root用户,用普通用户再次执行:

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

然后这里还写了 需要部署pod network

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/

部署网络插件

我们这里使用flannel插件,首先下载插件:

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

然后apply运行:

kubectl apply -f kube-flannel.yml

运行成功后,还需要稍等一会儿,可以使用下面的命令查看所有pods是否正常运行(可能还在拉取镜像)

kubectl get pods -n kube-system -o wide

全部都是Running后,节点也会变成Ready状态

kubectl get nodes

节点成功ready

至此,主节点就配置成功了。

Worker节点配置

Work节点的容器安装等工作和Master节点是一样的,只有到安装完kubeadm、kubectl和kubelet之后,keadm的初始化不是init命令,而是上面主节点部署完后让记住的join命令

kubeadm join <你的主节点ip>:<端口号> --token abcdef.0123456789abcdef \
     --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxx(上面出现过) 

如果忘记了上面的 join 命令可以使用命令kubeadm token create --print-join-command重新获取。

最后再在主节点执行

kubectl get nodes

可以看到两个节点。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐