linux 使用kubeadm安装k8s

步骤 1:关闭 SELinux 和防火墙和swap

在安装之前,需要将SELinux和防火墙关闭或配置防火墙以允许Kubernetes流量通过。在CentOS 7上,您可以使用以下命令来禁用SELinux:

#临时关闭
[root@master ~]# setenforce 0
#永久关闭
[root@master ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

禁用防火墙:

[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

 关闭swap:


#swap开启会影响k8s编排和调度应用程序运行的效果,会降低性能
# 临时关闭
[root@master ~]# swapoff -a 
# 永久关闭
[root@master ~]# sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

步骤 2:同步时间

在CentOS上安装Kubernetes之前,请确保在系统上时间统一。您可以使用以下命令来安装这些软件包:


#各个节点需要通过时间服务器保持时间同步
yum install ntpdate -y
 # 可添加到定时任务中
ntpdate time.windows.com

步骤 3:安装必需软件包

在CentOS上安装Kubernetes之前,请确保在系统上安装了以下软件包:vim、curl、wget、git。您可以使用以下命令来安装这些软件包:

#安装常用的软件包
[root@k8s-master01~]#yum install -y curl git yum-utils zlib zlib-devel openssl openssl-devel net-tools vim wget lsof unzip zip bind-utils lrzsz telnet ipset ipvsadm

注意:对于Kubernetes 1.22及更高版本中,kube-proxy默认使用IPVS作为服务代理。当您启用Kubernetes服务时,默认情况下会创建一个IPVS虚拟服务,并使用具有最小连接数调度算法的IPVS负载均衡器来将流量分发到后端Pod。

请注意,虽然Kubernetes 1.22及更高版本不需要手动加载IPVS内核模块,但是您必须确保所有运行Kubernetes节点的主机都已安装所需的软件包和依赖项,例如IPVS-utils和IPSet

步骤 4: 将桥接的IPv4流量传递到iptables的链

把桥接的IPv4流量传递到iptables的链 (每台执行)

#写入
[root@master ~]# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效
[root@master ~]# sysctl --system

#允许iptables检查桥接流量,若要显式加载此模块,需运行
[root@master ~]# modprobe br_netfilter 

步骤 5: 安装Contained

 1、安装 containerd 1.17.0

#安装 containerd 1.17.0
[root@master ~] wget https://github.com/containerd/containerd/releases/download/v1.7.0/cri-containerd-cni-1.7.0-linux-amd64.tar.gz
#安装到目录
[root@master ~] tar zxvf cri-containerd-cni-1.7.0-linux-amd64.tar.gz -C /

#创建目录
[root@master ~] mkdir /etc/containerd
#创建配置文件
[root@master ~] containerd config default > /etc/containerd/config.toml

1.1、修改上述config.toml配置

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

 [plugins."io.containerd.grpc.v1.cri"]
    
        #sandbox_image = "registry.k8s.io/pause:3.8"
        sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

2、安装 runc 1.1.6

[root@master ~] wget https://github.com/opencontainers/runc/releases/download/v1.1.6/runc.amd64
[root@master ~] chmod +x runc.amd64
[root@master ~] mv runc.amd64 /usr/local/sbin/runc
[root@localhost home]# /usr/local/sbin/runc -version
runc version 1.1.5
commit: v1.1.5-0-gf19387a6
spec: 1.0.2-dev
go: go1.17.10
libseccomp: 2.5.4

3、安装 libseccomp 2.5.4(内置太低)

#1、yum更新libseccomp 
[root@master ~] yum install libseccomp -y

#2、二级制安装libseccomp 
[root@master ~] wget 
https://github.com/opencontainers/runc/releases/download/v1.1.6/libseccomp-2.5.4.tar.gz
[root@master ~] tar zxvf libseccomp-2.5.4.tar.gz; cd libseccomp-2.5.4
[root@master ~]  ./configure
[root@master ~] make & make install

3、运行

#加入开机启动,并立即启动
[root@master home]# systemctl enable containerd --now

#检查启动状态
[root@master home]# systemctl status containerd

检查是否可用
[root@master multi-user.target.wants]# crictl version

Version:  0.1.0
RuntimeName:  containerd
RuntimeVersion:  v1.7.0
RuntimeApiVersion:  v1

步骤 6: 所有主节点安装kubeadm、kubelet、kubectl

1、配置kubernetes的yum源

[root@master ~]#  cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2、安装

#安装kubeadm kubelet kubectl

#不指定版本则安装最新版
[root@master ~]# yum install -y kubeadm kubelet kubectl

#指定版本
[root@master ~]# yum install -y kubeadm=1.25.0-00 kubelet=1.25.0-00 kubectl=1.25.0-00

3、初始化

#初始化
kubeadm init \
 --apiserver-advertise-address=10.0.2.15 \
 --image-repository registry.aliyuncs.com/google_containers \
 --control-plane-endpoint=cluster-endpoint \
 --kubernetes-version v1.27.1 \
 --service-cidr=10.1.0.0/16 \
 --pod-network-cidr=10.244.0.0/16 \
 --v=5

 
# –image-repository string:    这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers
# –kubernetes-version string:  指定kubenets版本号,默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(v1.22.1)来跳过网络请求。
# –apiserver-advertise-address  指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更换。
# –pod-network-cidr             指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对  –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。
# --control-plane-endpoint     cluster-endpoint 是映射到该 IP 的自定义 DNS 名称,这里配置hosts映射:192.168.0.113   cluster-endpoint。 这将允许你将 --control-plane-endpoint=cluster-endpoint 传递给 kubeadm init,并将相同的 DNS 名称传递给 kubeadm join。 稍后你可以修改 cluster-endpoint 以指向高可用性方案中的负载均衡器的地址。

 【温馨提示】kubeadm 不支持将没有 --control-plane-endpoint 参数的单个控制平面集群转换为高可用性集群。

4、初始化成功,配置环境变量(初始化成功输出中体现)

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

5、检查状态

#检查kubelet是否开启
[root@k8s-master01 ]# systemctl status kubelet.service 

#开启kubelet
[root@k8s-master01 ]# systemctl start kubelet.service 

6、重置

#重置kubeadm安装
kubeadm reset

#如果已安装:重置再初始化
kubeadm reset
rm -fr ~/.kube/  /etc/kubernetes/* var/lib/etcd/*

 优化下面推荐两种kubectl命令补全安装方式。

#安装bash-completion
yum install bash-completion  -y

#执行bash_completion
source /usr/share/bash-completion/bash_completion

#加载kubectl completion
source <(kubectl completion bash)
# 
echo "source <(kubectl completion bash)" >> ~/.bashrc

 步骤 7: 安装calico

注意:

在Kubernetes集群中,不建议在主节点(也称为控制平面节点)上安装calico/node容器。这是因为主节点通常用于运行核心控制平面组件,例如etcd、API服务器、调度程序和控制器管理器。这些组件对集群的正常运行至关重要,并且需要足够的计算资源和可用性来保持高可用性。

如果在主节点上部署calico/node容器,可能会导致竞争条件和资源争用,从而影响到其它关键组件的可用性和性能。此外,由于主节点一般被配置为不允许普通工作负载运行,因此确保在主节点上运行的容器数量最小化也是一个最佳实践。

因此,建议将calico/node容器部署到专门的工作节点上,以避免占用主节点的计算资源和可用性,并确保集群的正常运行。您可以使用NodeSelector和Taints/Tolerations等Kubernetes特性,来指定哪些节点应该运行calico/node容器并确保它们与其他工作负载隔离开来。

总之,在Kubernetes集群中使用Calico作为网络插件时,不建议在主节点上安装calico/node容器。相反,建议将其部署到专门的工作节点上,并使用Kubernetes特性来控制其位置和资源使用。

1、下载地址

网址:https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-etcd-datastore

2、安装非etcd版 (简单)

#下载
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-etcd.yaml -o calico.yaml

#运行
kubectl apply -f calico.yaml

 3、etcd版

curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-etcd.yaml -o calico.yaml

k8s1.27.x 最新版本使用kubeadm 的containerd的方式安装_flyfish的技术博客_51CTO博客

kubectl常用命令_kubectl查看所有pod_床前明月光,疑似地下霜的博客-CSDN博客

【云原生实战】Kubernetes实战之基础概念_--control-plane-endpoint_陶然同学的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值