kubernetes一步到位从头开始部署集群

1 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了Kubernetes的核心组件,如控制节点(Master)、数据节点(Node)、Pod、Service等,以及如何通过kubeadm、kubelet和kubectl进行集群搭建、网络插件安装、节点管理及kubectl命令的使用。还涵盖了集群删除和自动补全功能的说明。
摘要由CSDN通过智能技术生成

目录

1、kubernetes组件

2、相关概念

3、集群搭建

环境初始化

配置 Kubernetes yum源

安装 kubeadm、kubelet 和 kubectl

containerd部署

安装containerd

KMaster01配置

node配置

安装网络插件

补充:

kubectl命令自动补全

集群删除节点

kubectl在node节点上运行

测试


1、kubernetes组件

控制节点master:集群的控制平面,负责集群的决策(管理)

ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机
制
Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更
新等
Etcd :负责存储集群中各种资源对象的信息

工作结点node:集群的数据平面,负责为容器提供运行环境(干活)

Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器
KubeProxy : 负责提供集群内部的服务发现和负载均衡
Docker : 负责节点上容器的各种操作

2、相关概念

Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容

器的运行

Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod

Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

NameSpace:命名空间,用来隔离pod的运行环境

3、集群搭建

环境初始化

#备份yum源
[root@KMaster01 ~]# cd /etc/yum.repos.d/
[root@KMaster01 yum.repos.d]# mkdir bak
[root@KMaster01 yum.repos.d]# mv CentOS* bak
​
#更新yum源
[root@KMaster01 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
[root@KMaster01 yum.repos.d]# yum clean all
[root@KMaster01 yum.repos.d]# yum makecache
#kubernetes集群要求Centos版本要在7.9
[root@KMaster01 ~]# cat /etc/redhat-release
CentOS Linux release 8.5.2111
#为了方便后面集群节点间的直接调用,配置所有主机名解析
[root@KMaster01 ~]# vim /etc/hosts
192.168.20.61 KMaster01
192.168.20.203 KNode01
192.168.20.109 KNode02

时间同步

# 安装chrony
[root@KMaster01 ~]# yum install -y chrony
#设置时区
timedatectl set-timezone Asia/Shanghai
# 修改配置文件
[root@KMaster01 ~]# vim /etc/chrony.conf
server ntp.aliyun.com iburst
#server KMaster01 iburst
allow 192.168.20.0/24
local stratum 10
# 启动chronyd服务
[root@KMaster01 ~]# systemctl enable --now chronyd
#检查时间同步的源
[root@KMaster01 ~]# chronyc sources -v

关闭防火墙和selinux

$ sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
$ setenforce 0  # 临时
#关闭防火墙和selinux
[root@KMaster01 ~]# systemctl stop firewalld
[root@KMaster01 ~]# firewall-cmd --state
not running
[root@KMaster01 ~]# setenforce 0

禁用swap分区

$ swapoff -a  # 临时
$ vim /etc/fstab  # 永久
#禁用swap分区
[root@KMaster01 ~]# vim /etc/fstab
# /dev/mapper/centos-swap swap swap defaults 0 0

修改linux的内核参数

#修改linux的内核参数
[root@KMaster01 ~]# vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
# 加载网桥过滤模块
[root@KMaster01 ~]# modprobe br_netfilter
# 重新加载配置
[root@KMaster01 ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
# 查看网桥过滤模块是否加载成功
[root@KMaster01 ~]# lsmod | grep br_netfilter
br_netfilter           24576  0
bridge                192512  1 br_netfilter

配置 Kubernetes yum源

[root@KMaster01 ~]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1

安装 kubeadm、kubelet 和 kubectl

官方支持的用于部署 的工具是 kubeadm

需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

  • kubectl:用来与集群通信的命令行工具。

  • kubnes: 用来切换命名空间

[root@KMaster01 ~]# yum install -y kubelet kubeadm kubectl
[root@KMaster01 ~]# kubeadm version

配置cgroup驱动

# 配置kubelet的cgroup
# 为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。
cat <<EOF > /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
[root@KMaster01 ~]# systemctl enable --now kubelet

containerd部署

安装containerd

#所有节点
#卸载旧版本
[root@KMaster01 ~]# yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine  
                  
#安装必要的一些系统工具
[root@KMaster01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
​
#添加软件源信息
[root@KMaster01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
​
[root@KMaster01 ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
​
#安装containerd
[root@KMaster01 ~]# yum list | grep containerd
[root@KMaster01 ~]# yum install -y containerd
​
#初始化配置并修改驱动为cgroug
[root@KMaster01 ~]# containerd config default | tee /etc/containerd/config.toml
[root@KMaster01 ~]# sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml
​
#修改镜像
[root@KMaster01 ~]# sed -i "s#registry.k8s.io/pause:3.6#registry.aliyuncs.com/google_containers/pause:3.8#g" /etc/containerd/config.toml
​
#配置crictl并启动
[root@KMaster01 ~]# cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
[root@KMaster01 ~]# systemctl daemon-reload
[root@KMaster01 ~]# systemctl enable --now containerd
​
#测试
crictl pull nginx:alpine
crictl images
crictl rmi nginx:alpine
crictl images

KMaster01配置

#生成并修改配置文件
[root@KMaster01 ~]# kubeadm config print init-defaults > kubeadm.yml
[root@KMaster01 ~]# vim kubeadm.yml 
advertiseAddress:为控制切面地址,( Master 主机 IP )
criSocket:为 containerd 的 socket 文件地址
name: node 修改node为 KMaster
imageRepository:阿里云镜像代理地址,否则拉取镜像会失败
        registry.aliyuncs.com/google_containers 
kubernetesVersion:为 k8s 版本
podSubnet: 10.244.0.0/16
​
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

初始化

[root@KMaster01 ~]# systemctl restart containerd.service 
# 查看所需镜像列表
[root@KMaster01 ~]# kubeadm config images list --config kubeadm.yml
​
# 拉取镜像
[root@KMaster01 ~]# kubeadm config images pull --config kubeadm.yml
[root@KMaster01 ~]# crictl images
​
# 根据配置文件启动 kubeadm 初始化 k8s
[root@KMaster01 ~]# kubeadm init --config=kubeadm.yml --upload-certs --v=6

node配置

#使用命令加入集群
[root@KMaster01 ~]# kubeadm join 192.168.20.61:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:6def50dbdc845af9e50a4da027103883fa1923006972c12de720a8f8c5869665 
#在KMaster上查看节点
[root@KMaster01 ~]# kubectl get node
1、先查看一下这个node节点上的pod信息
[root@master ~]# kubectl get pod -o wide -A | grep node1
2、驱逐这个node节点上的pod
[root@master ~]# kubectl drain node1 --delete-local-data --force --ignore•daemonsets --delete-emptydir-data
3、删除这个node节点
[root@master ~]# kubectl delete nodes node1
node "node1" deleted
4、然后在node1这个节点上执行如下命令
[root@node1 ~]# kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
W1128 13:58:30.514901 15032 preflight.go:55] [reset] WARNING: Changes made to
this host by 'kubeadm init' or 'kubeadm join' will be reverted.
[reset] Are you sure you want to proceed? [y/N]: y

其他:

#初始化失败可以用 reset 指令重置,解决问题后重新初始化
kubeadm reset
#查看日志
journalctl -f -u kubelet
#加入指令重复获取
kubeadm token create --print-join-command
#查看网络插件
kubectl get daemonsets -n kube-system 

token 失效处理

# 重新生成token
$ kubeadm token create
abcdef.0123456789abcdef
# 获取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/^.* //'
b615fccddcd4e80fc6f9c5e477bfc7a053b017660b73fdeccf89c559739664d7
# 将新的node节点加入到k8s集群中
kubeadm join node主机ip地址:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash
sha256:b615fccddcd4e80fc6f9c5e477bfc7a053b017660b7

安装网络插件

#下载并修改配置文件
[root@KMaster01 ~]# curl https://docs.projectcalico.org/archive/v3.25/manifests/calico.yaml -O
​
[root@KMaster01 ~]# kubectl apply -f calico.yaml
[root@KMaster01 ~]# kubectl get pods -n kube-system
卸载插件
# 删除flannel的pod
# 使用一开始创建pod时同样的yaml文件
kubectl delete -f kube-flannel.yml
# 在集群各节点清理flannel网络的残留文件
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni
rm -rf /etc/cni/net.d

补充:

kubectl命令自动补全

yum install -y bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

集群删除节点

#查看并删除这个node节点上的pod信息
[root@KMaster01 ~]# kubectl get pod -o wide -A | grep knode01
[root@KMaster01 ~]# kubectl drain knode01 --delete-local-data --force --ignore-daemonsets --delete-emptydir-data
​
#删除这个node节点
[root@KMaster01 ~]# kubectl delete nodes knode01
node "knode01" deleted
​
#在节点上重启
[root@KNode01 ~]# kubeadm reset

kubectl在node节点上运行

#将master上的.kube文件复制到node节点上
[root@KMaster01 ~]# scp -r $HOME/.kube KNode01:$HOME/

测试

服务部署,测试集群是否正常工作

# 部署nginx
[root@KMaster01 ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@KMaster01 ~]# kubectl get deployments.apps
# 暴露端口
[root@KMaster01 ~]# kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务状态
[root@KMaster01 ~]# kubectl get pods,service -o wide
​
# 4 最后在电脑上访问下部署的nginx服务
192.168.20.61:31425
​
#删除
kubectl delete service/nginx
kubectl delete deployments.apps nginx

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值