Centos kubeadm安装单master多node,kubernetes、k8s超详细安装教程

简介: Centos kubeadm安装单master多node,kubernetes、k8s超详细安装教程

基础操作

1:修改主机名

master、node1、node2主机修改

hostnamectl set-hostname master && bash 
hostnamectl set-hostname node1 && bash 
hostnamectl set-hostname node2 && bash

2:设置hosts

master、node1、node2主机修改

echo "
192.168.3.128    master
192.168.3.129    node1
192.168.3.130    node2
" >> /etc/hosts

3:配置无密码登陆

master、node1、node2主机修改

ssh-copy-id root@master
ssh-copy-id root@node1
ssh-copy-id root@node2

4:关闭交换分区

master、node1、node2主机修改

swapoff -a

5:修改内核参数

master、node1、node2主机修改

modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

6:关闭firewalld和selinux

master、node1、node2主机修改

systemctl stop firewalld ; systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

7:配置阿里云repo

master、node1、node2主机修改

cd /etc/yum.repos.d/
mkdir /root/yum.repo
mv * /root/yum.repo/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all
yum makecache

8:配置阿里云docker源

master、node1、node2主机修改

yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

9:配置阿里云kubernetes源

master、node1、node2主机修改

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
EOF

10:开启ipvs

master、node1、node2主机修改

[root@master ~]# vim /etc/sysconfig/modules/ipvs.modules 
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
 /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
 if [ 0 -eq 0 ]; then
 /sbin/modprobe ${kernel_module}
 fi
done
[root@master ~]#  chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

11:安装基础软件包

master、node1、node2主机修改

yum -y install epel-release
yum install -y yum-utilsdevice-mapper-persistent-data lvm2 wgetnet-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-develcurl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconfautomake zlib-devel  python-devel epel-release openssh-server socat  ipvsadmconntrack ntpdate telnet ipvsadm

12:安装docker

master、node1、node2主机修改

yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io  -y
systemctl start docker&& systemctl enable docker.service

13:配置docker镜像加速器

master、node1、node2主机修改

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://vvjfywn5.mirror.aliyuncs.com"],"exec-opts":["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

14:安装初始化k8s所需软件包

master、node1、node2主机修改

yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
systemctl enable kubelet && systemctl start kubelet
systemctl status kubelet

\#上面可以看到kubelet状态不是running状态,这个是正常的,不用管,等k8s组件起来这个kubelet就正常了。

15:kubeadm初始化k8s集群

master、node1、node2主机修改

docker pull registry.aliyuncs.com/google_containers/coredns
docker pull registry.aliyuncs.com/google_containers/pause
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.20.6
docker pull calico/cni
docker pull calico/pod2daemon-flexvol
docker pull calico/kube-controllers
docker pull calico/node
docker pull registry.aliyuncs.com/google_containers/etcd:3.1.13-0
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.20.6

16:使用kubeadm初始化k8s集群

master主机修改

kubeadm init --kubernetes-version=1.20.6  --apiserver-advertise-address=192.168.3.128  --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification

出现如下界面则表示安装成功

Your Kubernetes control-plane 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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.3.128:6443 --token 1w70yh.ejzxa2rckpu1p25o \
    --discovery-token-ca-cert-hash sha256:aaa612678ea7d9a2a902467d13191412d9d66c8462bd57d9c20fb2a24601da1

用此命令将node节点加入集群

kubeadm join 192.168.3.128:6443 --token 1w70yh.ejzxa2rckpu1p25o \
    --discovery-token-ca-cert-hash sha256:aaa612678ea7d9a2a902467d13191412d9d66c8462bd57d9c20fb2a24601da1

\#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

master主机修改

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE    VERSION
master   NotReady   control-plane,master   110s   v1.20.6

17:扩容k8s集群

如果刚刚忘记保存加入集群的命令,可以用以下命令来查看

master主机修改

kubeadm token create --print-join-command

将node节点加入集群

node1、node2主机修改

kubeadm join 192.168.3.128:6443 --token 38jn8o.taun5799cxwq3s5j     --discovery-token-ca-cert-hash sha256:aaa612678ea7d9a2a902467d13191412d9d66c8462bd57d9c20fb2a24601da16

出现如下界面则执行成功

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

在master节点查看是否有node节点

master主机修改

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   8m10s   v1.20.6
node1    NotReady   <none>                 4m38s   v1.20.6
node2    NotReady   <none>                 4m38s   v1.20.6

18:安装网络插件calico

master主机修改

calico地址:https://docs.projectcalico.org/manifests/calico.yaml

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   8m10s   v1.20.6
node1    NotReady   <none>                 4m38s   v1.20.6
node2    NotReady   <none>                 4m38s   v1.20.6

查看calico状态,状态全部是running,就说明运行正常了

master主机修改

[root@master ~]# kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-56c7cdffc6-ntlfs   1/1     Running   0          4m25s
calico-node-jd9ds                          1/1     Running   0          4m25s
calico-node-k5n4f                          1/1     Running   0          4m25s
calico-node-q2tm9                          1/1     Running   0          4m25s
..........

查看node节点,Ready状态就说明是正常的

master主机修改

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   16m   v1.20.6
node1    Ready    <none>                 13m   v1.20.6
node2    Ready    <none>                 13m   v1.20.6

19:测试部署tomcat

node1、node2主机修改

node1、node2节点下载tomcat镜像

docker pull tomcat:8.5-jre8-alpine

master节点

[root@master ~]# vim tomcat.yaml 
apiVersion: v1  #pod属于k8s核心组v1
kind: Pod  #创建的是一个Pod资源
metadata:  #元数据
  name: demo-pod  #pod名字
  namespace: default  #pod所属的名称空间
  labels:
    app: myapp  #pod具有的标签
    env: dev      #pod具有的标签
spec:
  containers:      #定义一个容器,容器是对象列表,下面可以有多个name
  - name:  tomcat-pod-java  #容器的名字
    ports:
    - containerPort: 8080
    image: tomcat:8.5-jre8-alpine   #容器使用的镜像
    imagePullPolicy: IfNotPresent
[root@master ~]# kubectl apply -f tomcat.yaml 
pod/demo-pod create
[root@master ~]# kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
demo-pod   1/1     Running   0          20s

执行tomcat.yml文件

[root@master ~]# vim tomcat-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: tomcat
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30080
  selector:
    app: myapp
    env: dev
[root@master ~]# kubectl apply -f tomcat-service.yaml 
service/tomcat created
[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          24m
tomcat       NodePort    10.104.85.10   <none>        8080:30080/TCP   7s

在浏览器访问node1IP:30080、node2IP:30080
有什么问题可以在下面留言!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes Linux 开发者
在CentOS 7.8上使用kubeadm安装k8s 1.26
至此,你已经在CentOS 7.8上使用kubeadm成功安装了k8s 1.26。你可以通过输入 `kubectl get nodes`来查看节点状态,如果显示为Ready,那么恭喜你,你的Kubernetes集群已经准备好了。
456 23
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1288 33
|
Kubernetes Linux 网络安全
CentOS 7.8下使用kubeadm安装Kubernetes 1.26
这就是所有的前线报告,冒险家们,你们已经做好准备,开始在CentOS 7.8上通过Kubeadm安装Kubernetes 1.26的挑战了吗?走上这段旅程,让你的代码飞翔吧。
333 16
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1268 17
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
1723 13
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
Kubernetes Ubuntu 网络安全
Ubuntu基于kubeadm快速部署K8S实战
关于如何在Ubuntu系统上使用kubeadm工具快速部署Kubernetes集群的详细实战指南。
1024 3
|
Kubernetes 应用服务中间件 Linux
多Master节点的k8s集群部署
多Master节点的k8s集群部署
|
9月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
721 1
|
9月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
519 89