「 ~ 」- jnan806's blog
jnan806

kubernetes containerd版本


基础环境配置

节点规划

IP hostname 说明
10.0.0.1 k8s-master master 节点
10.0.0.2 k8s-node01 node 节点
10.0.0.3 k8s-node02 node 节点

基本配置

所有节点 配置hosts,修改/etc/hosts如下:

10.0.0.1 k8s-master
10.0.0.2 k8s-node01
10.0.0.3 k8s-node02

所有节点 CentOS 初始化

详细步骤 回顾文章 << CentOS 初始化 >>

所有节点 containerd 安装

详细步骤 回顾文章 << containerd 安装 >>

K8s组件及Runtime安装

所有节点配置k8s内核:

vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-arptables = 1

此时 /etc/sysctl.d/k8s.conf 无法生效,需要启动模块

# 临时生效,执行如下命令
modprobe br_netfilter

# 重启永久生效,执行如下步骤
vim /etc/sysconfig/modules/br_netfilter.modules

modprobe br_netfilter

chmod +x /etc/sysconfig/modules/br_netfilter.modules
/bin/bash /etc/sysconfig/modules/br_netfilter.modules

查看是否成功

lsmod | grep br_netfilter

所有节点 ipvs 安装

yum install -y ipset ipvsadm

配置 ipvs

vim /etc/sysconfig/modules/ipvs.modules

#!/bin/bash

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

chmod +x /etc/sysconfig/modules/ipvs.modules
/bin/bash /etc/sysconfig/modules/ipvs.modules

查看是否成功

lsmod | grep -e -ip_vs -e nf_conntrack_ipv4

所有节点kubernetes.repo源配置:

vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

k8s 安装

master 节点 kubelet kubeadm 外 多安装一个 kubectl

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

master 节点 添加 kubectl 自动补全

source <(kubectl completion bash)

node 节点 安装 kunelet kubeadm

yum install -y kubelet kubeadm --disableexcludes=kubernetes

配置 kubelet

vim /etc/sysconfig/kubelet

KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

设置 kubelet 开机启动

systemctl enable kubelet && systemctl start kubelet

此时kubelet的状态,还是启动失败,通过journalctl -xeu kubelet能看到error信息;只有当执行了kubeadm init后才会启动成功。

拉取 kubeadm 默认配置

kubeadm config print init-defaults > ~/k8s-init-config.yaml

更改 k8s.gcr.io 镜像下载地址,并下载

vim ~/k8s-init-config.yaml

imageRepository: registry.aliyuncs.com/google_containers
kubeadm config images pull --config=~/k8s-init-config.yaml

修改 /etc/containerd/config.toml, 使 pause 和 k8s 下载下来的镜像保持一致

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"

重启 containerd

systemctl daemon-reload
systemctl restart containerd

master 节点 初始化

方式一

vim ~/k8s-init-config.yaml


advertiseAddress: 10.0.0.1

imageRepository: registry.aliyuncs.com/google_containers

serviceSubnet: 10.55.0.0/16
podSubnet: 10.99.0.0/16

kubeadm init \
--config=k8s-init-config.yaml \
--ignore-preflight-errors=swap \
--upload-certs

方式二

kubeadm init \
--apiserver-advertise-address=10.0.0.1 \
--apiserver-bind-port=6443
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.55.0.0/16 \
--pod-network-cidr=10.99.0.0/16
--ignore-preflight-errors=swap \
--upload-certs

apiserver-advertise-address 如果配置的不是ip而是api.server,则需要在 所有节点的 /etc/host 添加 10.0.0.1 apiserver.com的解析

master 失败后

# 重置kubeadm
kubeadm reset -f
# 删除旧配置
rm -fr $HOME/.kube/config

master 成功后

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

master 节点 加入集群

kubeadm join 10.0.0.1:6443 --token hzlzrr.uwuegx4locpu36oc \
--discovery-token-ca-cert-hash sha256:4cbe428cb3503277be9fbcf3a99de82a97397a624dd94d4270c4eed1b861f951 \
--control-plane --certificate-key 28b178f04afae3770aa92add0206650b2359dd61424f127a6d44142dd15a280d

node 节点 初始化

node 节点 加入集群

# 该命令来自master安装成功后的最后两行信息
kubeadm join 10.0.0.1:6443 --token hzlzrr.uwuegx4locpu36oc \
--discovery-token-ca-cert-hash sha256:4cbe428cb3503277be9fbcf3a99de82a97397a624dd94d4270c4eed1b861f951

master 节点 安装 网络插件

选其一即可:calico 或 flannel 或 weave 网络插件
Calico

kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"

Weave

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

运维操作

修改 端口 范围

vim /etc/kubernetes/manifests/kube-apiserver.yaml
添加到如下位置
- command:
- kube-apiserver
- --service-node-port-range=1-65535

查看 token

kubeadm token list

重新创建 token

# 临时
kubeadm token create --print-join-command
# 永久
kubeadm token create --print-join-command --ttl 0

查看discovery-token-ca-cert-hash 获取ca证书sha256编码hash值

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

删除 node 节点

kubectl delete nodes k8s-node01

本文作者:jnan806
本文链接:http://jnan806.panpan.cloud/2021/11/25/cncf/kubernetes/kubernetes-containerd/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可

×