centos7下 k8s的安装 2023年8月6日
系统:centos7etcd:3.5.7runc:1.1.5建议内核升级到5.10本次安装就只有一个master和两个个node节点其中 k8s-n1 是master节点网络插件:calico 3.26.0 (虽然目前是最新版本,官方文档没显示支持kubernetes1.27,但测试安装可以使用)
一、基本信息介绍
kubernetes: 1.27.4
系统:centos7
etcd:3.5.7
containerd:1.6.20
runc:1.1.5
建议内核升级到5.10
本次安装就只有一个master和两个个node节点
192.168.2.111 k8s-n1
192.168.2.112 k8s-n2
192.168.2.113 k8s-n3
其中 k8s-n1 是master节点
网络插件:calico 3.26.0 (虽然目前是最新版本,官方文档没显示支持kubernetes1.27,但测试安装可以使用)
二、linux环境调整
为了简单直接root用户登录
1. 设置静态ip,k8s需要固定ip
vi /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160
UUID=5a26dced-6a7f-405e-bb52-abc83085f30e
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.2.111
NETMASK=255.255.255.0
GATEWAY=192.168.2.2
DNS1=192.168.2.2
2. 设置主机名
hostnamectl set-hostname k8s-n1
3. 本地dns解析
cat >> /etc/hosts << EOF
192.168.2.111 k8s-n1
192.168.2.112 k8s-n2
192.168.2.113 k8s-n3
EOF
4.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
5.关闭selinux
sed -i 's/enforcing/0/' /etc/selinux/config
setenforce 0
6、关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a
7、添加内核模块和开启ipv4转发、网桥参数
(1)加载内核模块:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
(2)添加内核参数
#追加以下内容
cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效
6、时间同步
yum install ntp -y
ntpdate ntp2.aliyun.com
三、安装 containerd
kubernetes1.20版本后不在直接由docker daemon处理镜像操作,转为直接与containerd服务交互后,去调用runc去处理镜像操作
1.yum源安装
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum makecache
2.安装containerd
#我安装的版本是 containerd.io.aarch64 0:1.6.22-3.1.el7
yum install containerd.io -y
四、安装kubectl、kubeadm、kubelet
Kubelet:
运行在cluster所有节点上,负责启动POD和容器
Kubeadm:
用于初始化cluster的一个工具
Kubectl:
kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件
直接安装是用的谷歌的源,我们更换为aliyun的源
# x86 架构cpu
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
EOF
# 苹果m1芯片cup
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
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
EOF
yum makecache
yum install kubelet kubeadm kubectl -y
如果选错了源,导致yum源缓存了错误的包信息,可以 rm -rf /var/cache/yum/*删除所有的源缓存,重新执行yum makecache
五、修改containerd配置
本步骤node节点也要同样的修改
cp /etc/containerd/config.toml /etc/containerd/config.toml.bak #备份源文件
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
找到SystemdCgroup = false这一行,将false改为true。
找到包含sandbox_image这一行,将地址改为“registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9”
六、 启动containerd和 kubelet
systemctl enable containerd --now
systemctl enable kubelet --now
如果之前已经启动了 containerd 用下面的命令重启
systemctl restart containerd#重启生效修改后的配置
crictl containerd管理工具配置
执行如下命令:
crictl images list
如果crictl执行出现类似:
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
ERRO[0002] connect endpoint 'unix:///var/run/dockershim.sock', make sure you are running as root and the endpoint has been started: context deadline exceeded
这时需要配置crictl,执行如下命令:
cat <<EOF> /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
七、启动集群
1. 提前拉取主节点需要的镜像
国内镜像下载比较慢,我们可以提前拉取主节点,需要的镜像。这样启动的主节点的时候,就不需要再重新拉取
#查看会拉取的镜像清单
kubeadm config images list
#手动提前拉取镜像,可以看到拉取过程及拉取情况
kubeadm config images pull
Your Kubernetes control-plane has initialized successfully!
如果拉取不下来,可以去阿里云手动拉取
# 外网下载不下来,用阿里云下载
crictl pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/kube-proxy:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/pause:3.9
crictl pull registry.aliyuncs.com/google_containers/etcd:3.5.7-0
crictl pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
不用担心名称不同,他们的镜像id是一样的,会被k8s识别到
注意版本号要和 kubeadm config images list 列出的一致
2. 启动主节点
1)初始化
kubeadm init \
--apiserver-advertise-address=192.168.2.111 \
--control-plane-endpoint=k8s-n1 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.27.4 \
--service-cidr=10.10.0.0/12 \
--pod-network-cidr=10.254.0.0/16
找个地方记录输出中的下面这几行
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8
其中下面这一行,用于向集群中添加主节点
kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8 \
--control-plane
下面这一行,用于向集群中添加从节点
kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8
没有记录到添加节点的命令,也没有关系可以用如下命令重新获得。
kubeadm token create --print-join-command
3.检查初始化情况
kubectl get pod -n kube-system
如果出现:couldn’t get current server API group list: Get “http://localhost:8080/api?timeout=32s”: dial tcp 127.0.0.1:8080: connect: connection refused
需要执行下面操作
注意一定要在 kubeadm init 执行完之后,/etc/kubernetes/admin.conf才会产生
方法1:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
方法2:
sudo vim /etc/profile
export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile
4 添加node节点
在node节点上执行,上面保存的子节点加入命令
kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8
03主节点上执行如下命令,查看节点加入情况
kubectl get nodes
八.配置集群网络
大家可以注意到,此时的node节点,都是处于NotReady状态,这是因为,我们还没有为集群安装,网络管理插件(也是一个容器)
网络管理插件主流的目前有两种flannel和calico,这里只演示calico。
1.下载calico的压缩包到主节点
以下都是在主节点操作
(1)到https://kgithub.com/projectcalico/calico/releases下去下载release-v3.26.0.tgz
我是直接下载的最新版本
(2) 解压缩
tar xvf elease-v3.26.0.tgz
(3) 安装镜像
注意这一步不是必须的,只是为了加速部署
# 进入镜像目录
cd elease-v3.26.0/images/
#查看当前kubernetes环境下有哪些镜像
crictl images list
#查看有哪些命名空间,默认导入镜像会到default这个命名空间
ctr namespace list
#安装镜像需要指定导入的命名空间为k8s.io,如果不在image目录下,镜像要写绝对路径,苹果的m1芯片下,往往不会成功,可以跳过这个步骤
ctr --namespace=k8s.io images import calico-kube-controllers.tar
ctr --namespace=k8s.io images import calico-node.tar
ctr --namespace=k8s.io images import calico-cni.tar
crictl image list
查看导入的镜像,见下图
2.直接用yaml文件创建calico的pod。
# 进入镜像目录
cd elease-v3.26.0/manifests/
# 加载calico的pod到k8s
kubectl apply -f calico.yaml
如果本地没有calico的pod镜像,
k8s会自动下载镜像,只是时间会长一点
查看pod部署情况,看是否都已经,部署ok
kubectl get pods -n kube-system
此时查看节点情况,会发现节点都已经ready了
kubectl get nodes
更多推荐
所有评论(0)