k8s集群admin方式部署及组件作用

节点
Masker:集群控制节点,每个集群至少一个master节点负责集群的管控
Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
Pod:kubernetes的最小控制单元,容器都是运行再pod中的,一个pod中可以有1个或者多个容器
Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等
Service:pod对外服务的统一入口,下面可以维护着同一类的多个pod
Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
NameSpace:命名空间,用来隔离pod的运行环境

核心组件
Kubernetes 主要由以下几个核心组件组成:
etcd 保存了整个集群的状态;
apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和
发现等机制;
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新
等;
scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管
理;
Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡


创建Pod清单 --> API Server
API Server --> etcd
etcd --> API Server
kube-scheduler --> API Server --> etcd
etcd --> API server --> kubelet --> Docker
kubelet --> API Server --> etcd

管理员清单提交给了 APIServer;
API Server 接收到请求后把资源清单信息存入到etcd数据库中;
etcd存好后跟新状态给API Server;
API Server通过相应的接口跟新事件;
kube-scheduler 组件发现这个时候有一个Pod还没有绑定到节点上,就会对这个Pod进行一系列的调度,把它调度到一个最合适的节点上;
然后把这个节点和Pod绑定到一起的信息告诉API Server;
API Server将调度消息跟新到etcd里,etcd更新好后返回状态给API Server;
节点上的kubelet组件这个时候watch到有一个Pod被分配过来了,就去把这个Pod的信息拉取下来,然后根据
描述通过容器运行时把容器创建出来,最后当然同样把Pod状态汇报给API Server 再写回到etcd中去,这样就
完成了一整个的创建流程。

Pod
pod时k8s的最小单位
pod的ip地址是随机的,删除pod会改变ip
pod都有一个根容器
一个pod内可以由一个或多个容器组成
一个pod内的容器共享根容器的网络命名空间和文件系统卷
一个pod的内的网络地址由根容器提供
Pod运行状态
Pending 等待中
Running 运行中
Succeeded 正常终止
Failed 异常停止
Unkonwn 未知状态

Label
label标签是kubernetes中非常重要的一个属性,label标签就像身份证一样,可以用来识别k8s的对象
我们在传统架构里不同组件之间查找都是通过ip地址,但是k8s里,很多匹配关系都是通过标签来查找
Namespace
Namespace(命名空间)是k8s里另一个非常重要的概念,Namespace通过集群内部的资源对象划分为不同的。
Namespace里,形成逻辑上的不同项目组或用户组
常见的pod,service,Deployment等资源如果没有指定命名空间,则默认创建在名为default的默认命名空间

Controoler
用来管理Pod,控制器的种类有很多
- RC Replication Controller   #控制Pod有多个副本
- RS  replicaSet              #RC控制的升级版
- Deployment                  #推荐使用,功能更强大,包含了RS控制器
- DaemonSet                   #保证所有的Node上有且只有一个Pod在运行
- StatefulSet                 #有状态应用,为Pod提供唯一标识,它可以保证部署和scale的顺序


Kubernetes部署
1.二进制安装    (生产推荐)
2.kubeadm安装 学习和实验
3.第三方安装工具比如rancher
4.云服务的k8s,比如阿里云的ACK

kubeadm安装准备   #除了hosts其他所有节点配置
关闭防火墙       
关闭selinux
配置hosts解析
关闭swap分区   sed -i '/swap/d' /etc/fstab
关闭selinux sed -i 's/enforcing/disabled/g' /etc/selinux/config
系统环境准备
设置k8s禁止使用swap
cat > /etc/sysconfig/kubelet << EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"           #驱动改为systemd驱动
KUBELET_EXTRA_ARGS="--fail-swap-on=false"               #忽略swap分区报错
EOF  

设置时间同步
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd

配置hosts文件
cat >> /etc/hosts << EOF
192.168.211.100 master
192.168.211.110 node1
192.168.211.120 node2
EOF

设置内核参数将ipv4流量传递到iptables的链
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 --system

加载IPVS模块
cat >/etc/sysconfig/modules/ipvs.modules<<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
source /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv

安装配置docker     #切记匹配K8s版本
配置阿里源
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
安装指定版本docker
yum list docker-ce --showduplicates
yum -y install docker-ce-19.03.15  docker-ce-cli-19.03.15
配置docker镜像加速和cgroup驱动
mkdir /etc/docker -p
cat >> /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://01xxgaft.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
启动docker并设置开机自启
systemctl enable docker && systemctl start docker

添加k8s阿里云yum源     #所有节点
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
安装
master:kube-apiserver、scheduler、etcd
node:kubelet、kube-proxy

yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3 ipvsadm
systemctl start kubelet
systemctl enable kubelet

初始化集群命令只在master节点运行
kubeadm init \
--apiserver-advertise-address=192.168.211.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.3 \
--service-cidr=192.1.0.0/16 \
--pod-network-cidr=192.2.0.0/16 \
--service-dns-domain=cluster.local \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=NumCPU

为kubectl准备kubeconfig      #管理k8s集群的凭证文件
mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看节点状态
kubectl get nodes

设置kube-proxy使用ipvs模式,将mode修改为ipvs
kubectl edit cm kube-proxy -n kube-system
重启kube-proxy
 kubectl  delete pods -n kube-system -l k8s-app=kube-proxy
查看pod信息
kubectl  get pods -n kube-system -l k8s-app=kube-proxy
查看日志
 kubectl logs -f kube-proxy-pg99x -n kube-system
检查ipvs规则
ipvsadm -Ln

将node节点加入master
kubeadm join 192.168.211.100:6443 --token cvdzgw.qlrm2jqa15eexs78 \
    --discovery-token-ca-cert-hash sha256:253dc3197f2aee043d962d4268031fd22e7dd65831b9793eda6ea86a653bedb4

#kubeadm init 作用:检查环境与拉取镜像
#1.[preflight]环境检查和拉取镜像 kubeadm config images pull
#2.[certs]生成k8s证书和etcd证书 /etc/kubernetes/pki
#3.[kubeconfig] 生成kubeconfig文件
#4.[kubelet-start]生成kubelet配置文件
#5.[control-plane]部署管理节点组件,用镜像启动容器 lubectl get pods -n kube-system
#6.[etcd]部署etcd数据库,用镜像启动容器
#7.[upload-config] [kubelet] [upload-certs] 上传配置文件到k8s中
#8.[mark-control-plane]给管理节点添加一个标签 node-role.kubernetes.io/master='',node-role.kubernetes.io/master:NoSchedule]
#9.[bootstrap-token]自动为kubelet颁发证书
#10.[addons]部署插件,CoreDNS、kube-proxy
#部署完成执行,拷贝连接k8s集群认证文件到默认路径下
#mkdir -p $HOME/.kube
#  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#  sudo chown $(id -u):$(id -g) $HOME/.kube/config

#node节点  
#kubeadm join 192.168.211.100:6443 --token hovwan.76ci92culx3r43t7    
# --discovery-token-ca-cert-hash sha256:7de25c6275c858fce1e79f30d492e2a1af1ae90518a81b6eab7d7bb27dacd1c8 
 #遇到了两次报错分别通过将master的/etc/kubernetes/admin.conf文件复制到node对应目录
 #使用kubeadmin reset清空配置
 
#网络插件
#wget https://docs.projectcalico.org/manifests/calico.yaml


部署flannel网络插件master执行
git clone --depth 1 https://github.com/coreos/flannel.git
##修改配置文件将128行替换为podip,180行新增加一行指定网卡名
cd flannel/Documentation/
vim kube-falannel.yml
128 "Network": "192.1.0.0/16"
189  - --iface=ens33

kubectl apply -f kube-flannel.yml 
给节点打标签
kubectl label nodes node1 node-role.kubernetes.io/node=
kubectl label nodes node2 node-role.kubernetes.io/node=

支持命令补全
yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
kubectl completion bash >/etc/bash_completion.d/kubectl


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装 Kubernetesk8s集群在 Ubuntu 上可以分为几个步骤: 1. 确保你的 Ubuntu 系统已经更新到最新版本,并且具备以下硬件要求: - 64-bit CPU - 至少 2GB 内存(推荐 4GB 或以上) - 至少 20GB 可用磁盘空间 - 具备 root 权限或者 sudo 权限 2. 安装 Docker: ```shell $ sudo apt-get update $ sudo apt-get install docker.io ``` 3. 配置 Docker 镜像加速(可选): ```shell $ sudo mkdir -p /etc/docker $ sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://your-mirror.example.com"] } EOF $ sudo systemctl daemon-reload $ sudo systemctl restart docker ``` 4. 安装 kubeadm、kubelet 和 kubectl: ```shell $ sudo apt-get update && sudo apt-get install -y apt-transport-https curl $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - $ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list $ sudo apt-get update $ sudo apt-get install -y kubelet kubeadm kubectl $ sudo apt-mark hold kubelet kubeadm kubectl ``` 5. 初始化 kubeadm: ```shell $ sudo kubeadm init ``` 6. 按照初始化的输出信息,设置 kubeconfig 文件和普通用户的访问权限: ```shell $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 7. 安装网络插件(例如 Flannel): ```shell $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 8. 等待一段时间,直到所有的 Kubernetes 组件都启动成功: ```shell $ kubectl get pods --all-namespaces ``` 这样,你就成功在 Ubuntu 上安装了一个基本的 Kubernetes 集群。你可以继续添加更多的节点,或者部署应用程序到集群中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值