kubeadm安装单master单node节点k8s集群

kubeadm安装单master单node节点k8s集群操作系统 centos7 6podSubnet pod 网段 10 244 0 0 16serviceSub service 网段 10 10 0 0 16 集群角色 IP 主机名安装组件控制节点 192 168 53 100k8s jy master1apise controller manager scheduler etcd kube proxy jypod

操作系统:centos7.6

podSubnet(pod 网段) 10.244.0.0/16

serviceSubnet(service 网段): 10.10.0.0/16

集群角色 IP 主机名 安装组件
控制节点 192.168.53.100 k8s-jy-master1 apiserver、controller-manager、scheduler、etcd、kube-proxy、docker、calico
工作节点 192.168.53.101 k8s-jy-node1 kubelet、kube-proxy、docker、calico、coredns
工作节点 192.168.53.102 k8s-jy-node2 kubelet、kube-proxy、docker、calico、coredns

说明:  

  kubeadm 是官方提供的开源工具,是一个开源项目,用于快速搭建 kubernetes 集群,目前是比较方便和推荐使用的。kubeadm init 以及kubeadm join 这两个命令可以快速创建 kubernetes 集群。Kubeadm 初始化 k8s,所有的组件都是以 pod 形式运行的,具备故障自恢复能力。        

  kubeadm 是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,属于自动部署,简化部署操作,证书、组件资源清单文件都是自动创建的,自动部署屏蔽了很多细节,使得对各个模块感知很少,如果对 k8s 架构组件理解不深的话,遇到问题比较难排查。

  kubeadm 适合需要经常部署 k8s,或者对自动化要求比较高的场景下使用。

1、初始化实验集群环境

1.1 配置主机名称

在 192.168.53.100 上执行如下:

hostnamectl set-hostname k8s-jy-master1 && bash 

在 192.168.53.101 上执行如下:

hostnamectl set-hostname k8s-jy-node1 && bash 

在 192.168.53.102 上执行如下:

hostnamectl set-hostname k8s-jy-node2 && bash 

1.2 配置hosts文件

tee -a /etc/hosts <<-'EOF ' 192.168.53.100 k8s-jy-master1 192.168.53.101 k8s-jy-node1 192.168.53.101 k8s-jy-node1 EOF 

1.3 配置主机免密登录

每台服务器都需要执行

# ssh-keygen # ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-jy-master1 # ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-jy-node1 # ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-jy-node2 

1.4 关闭swap分区,提高性能

临时关闭

swapoff -a

永久关闭

  修改/etc/fstab 文件,注释swap一行(如果是克隆机需删除 UUID)

# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 

1.5 关闭防火墙、selinux安全机制

systemctl stop firewalld && systemctl disable firewalld setenforce 0 临时关闭selinux 永久关闭selinux,修改/etc/selinux/config sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  

 1.6 修改服务器内核参数

# modprobe br_netfilter # echo "modprobe br_netfilter" >> /etc/profile # tee -a /etc/sysctl.conf <<-'EOF' net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 net.ipv4.ip_forward = 1 EOF # sysctl -p 

1.7 配置阿里云的repo源

# cd /etc/yum.repos.d/ # mkdir bak # mv CentOS-Base.repo bak/ # curl -o /etc/yum.repos.d/Centos7.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

配置docker的repo源

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 或者使用阿里云的docker源 (二选一即可) # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

安装 epel 源

#安装官方epel源 # yum install -y epel-release #安装阿里的epel源 # wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo # yum clean all # yum makecache 

配置安装k8s组件需要的阿里云的repo源

# 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 

1.8 配置时间同步

# yum -y install ntpdate # ntpdate cn.pool.ntp.org 添加时间同步定时任务 crontab 

1.9 开启 ipvs

  ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的 4 层 LAN 交换,作为 Linux内核的一部分。ipvs 运行在主机上,在真实服务器集群前充当负载均衡器。ipvs 可以将基于 TCP 和 UDP的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。

通过yum方式安装 # yum install -y ipvsadm 运行启动ipvsadm # ipvsadm 查看内核是否加载 # lsmod |grep ip_vs ip_vs  0 nf_conntrack  7 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4 libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack 

1.10 安装基础软件包

# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlibdevel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm 

2、安装docker

2.1 安装docker-ce

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

2.2 配置docker镜像加速器和驱动

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

#修改 docker 文件驱动为 systemd,默认为 cgroupfs,kubelet 默认使用 systemd,两者必须一致才可以

3、安装 k8s 所需软件包

# 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 就正常了。 

4、kubeadm 初始化 k8s 集群 

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

显示如下说明安装完成:

上面这条命令是把 node 节点加入集群当中

根据输出结果提示操作

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

5、扩容k8s 集群,添加第一个工作节点

先将node1 加入集群当中

[root@k8s-jy-node1 ~]# kubeadm join 192.168.53.100:6443 --token t419t0.nfk1uvacbvuyk1f1 \ --discovery-token-ca-cert-hash sha256:381e3bddd26e04bfb924cfbd9a2075e85ecaa973abf33e 

# 上面输出说明 node1 节点已经加入集群充当工作节点了

# 在master 节点上执行 kubectl get nodes 查看

# 此时集群状态还是 NotReady 状态,因为没有安装网络插件 

6、扩容k8s 集群,添加第二个工作节点

注:如果吗,没有保存加入集群节点命令,可以在master 节点执行如下命令查看

kubeadm token create --print-join-command 

输出如下:

在准备加入的节点上个执行此命令即可,然后主节点上查看

# 可以看到 xianchaonode1、xianchaonode2 的 ROLES 角色为空,<none>就表示这个节点是工作节点,可以给工作节点打个标签比如:worker

[root@k8s-jy-master1 ~]# kubectl label node k8s-jy-node1 node-role.kubernetes.io/worker=worker [root@k8s-jy-master1 ~]# kubectl label node k8s-jy-node2 node-role.kubernetes.io/worker=worker 

7、安装 kubernetes 网络组件-Calico

注:在线下载配置文件地址: https://docs.projectcalico.org/manifests/calico.yaml 

[root@k8s-jy-master1 ~]# kubectl apply -f calico.yaml 

# STATUS 状态是 Ready,说明 k8s 集群正常运行了 

8、测试在 k8s 创建 pod 是否可以正常访问网络

在工作节点上pull 一个busybox 镜像,本地下载好上传解压也可

# docker load < busybox-1-28.tar 
[root@k8s-jy-master1 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh 

9、测试 coredns 是否正常 

[root@k8s-jy-master1 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh If you don't see a command prompt, try pressing enter. / # nslookup kubernetes.default.svc.cluster.local Server: 10.96.0.10 Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local Name: kubernetes.default.svc.cluster.local Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local / #  

10、安装 k8s 可视化 UI 界面 dashboard

10.1 安装 dashboard

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml 

修改recommended.yaml配置,如下:

[root@k8s-master k8s_install]# pwd /root/k8s_install [root@k8s-master k8s_install]# vim recommended.yaml ……………… kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: # 添加处 type: NodePort ports: - port: 443 targetPort: 8443 # 添加处 nodePort: 30001 selector: k8s-app: kubernetes-dashboard ……………… template: metadata: labels: k8s-app: kubernetes-dashboard spec: containers: - name: kubernetes-dashboard image: kubernetesui/dashboard:v2.0.0-rc6 # 修改处 从 Always 改为了 IfNotPresent #imagePullPolicy: Always imagePullPolicy: IfNotPresent ……………… spec: containers: - name: dashboard-metrics-scraper image: kubernetesui/metrics-scraper:v1.0.3 # 添加如下行 imagePullPolicy: IfNotPresent 

# 启动dashboard

[root@k8s-jy-master1 ~]# kubectl apply -f recommended.yaml 

# 查看dashboard 状态

[root@k8s-jy-master1 ~]# kubectl get pods -n kubernetes-dashboard -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dashboard-metrics-scraper-7b8b58dc8b-rrps4 1/1 Running 0 2m18s 10.244.2.4 k8s-node02 <none> <none> kubernetes-dashboard-755dcb9575-dxb8h 1/1 Running 0 2m18s 10.244.1.4 k8s-node01 <none> <none> 

# 查看 dashboard 前端的 service

[root@k8s-jy-master1 ~]# kubectl get svc -n kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-metrics-scraper ClusterIP 10.102.232.127 <none> 8000/TCP 2m50s kubernetes-dashboard ClusterIP 10.96.144.106 <none> 443/TCP 2m50s 
今天的文章 kubeadm安装单master单node节点k8s集群分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-07 10:11
下一篇 2024-12-07 10:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/80291.html