Kubernetes(九)单Master 部署API Server、controller-manager、scheduler

一、在master节点下载二进制包

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.16.md#v1161

二、选择kubernetes-server-linux-amd64.tar.gz下载

wget https://storage.googleapis.com/kubernetes-release/release/v1.16.6/kubernetes-server-linux-amd64.tar.gz

三、解压文件

tar zxvf kubernetes-server-linux-amd64.tar.gz

四、得到kubernetes目录

cd kubernetes

五、我们只需要kubernetes/server/bin以下文件

  • kube-apiserver
  • kubectl
  • kube-controller-manager
  • kube-scheduler

以上是为了获取最新的k8s,所以可以去官网下载k8s安装的二进制文件,我们还需要一些其他的辅助文件:

下面的文件实际上可以正常运行的,可以跳过一至五这个步骤

k8s-master.tar.gz
86.6 MB

解压文件tar zxvf k8s-master.tar.gz 输出以下内容:

查看目录结构 tree kubernetes

kubernetes
├── bin #安装程序,bin文件我们可以利用官方的新版本替换掉
│   ├── kube-apiserver
│   ├── kube-controller-manager
│   ├── kubectl
│   └── kube-scheduler
├── cfg #配置文件
│   ├── kube-apiserver.conf
│   ├── kube-controller-manager.conf
│   ├── kube-scheduler.conf
│   └── token.csv
├── logs #存放日志
└── ssl #存放证书

查看cat kube-apiserver.conf文件

输出以下内容:

KUBE_APISERVER_OPTS="--logtostderr=false \ #输出日志
--v=2 \  #日志级别 0-8级别范围
--log-dir=/opt/kubernetes/logs \ #日志输出目录
--etcd-servers=https://192.168.31.61:2379,https://192.168.31.62:2379,https://192.168.31.63:2379 \ #etcd服务地址配置
--bind-address=192.168.31.61 \ #本机IP(内网IP)
--secure-port=6443 \ #端口
--advertise-address=192.168.31.61 \ #通告地址,一般和本机IP一样,告诉node通过哪个IP来链接访问
--allow-privileged=true \ #允许创建的容器具有超级管理员权限
--service-cluster-ip-range=10.0.0.0/24 \ #service IP范围,service会分配这个IP段的IP地址
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \ #启用控制插件,属于k8s高级功能,比如资源配额限制等
--authorization-mode=RBAC,Node \ #授权模式,一般使用rbac角色来访问
--enable-bootstrap-token-auth=true \ #启用bootstrap,为他们自动颁发证书,在token.csv 定义具体内容
--token-auth-file=/opt/kubernetes/cfg/token.csv \
--service-node-port-range=30000-32767 \ #暴露servicenode的端口

#kubelet证书

--kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \

#apiserver使用https证书
--tls-cert-file=/opt/kubernetes/ssl/server.pem \ 
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \

#etcd使用https证书
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/server.pem \
--etcd-keyfile=/opt/etcd/ssl/server-key.pem \

#日志审计配置
--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"

更多配置明细访问官网 https://kubernetes.io/zh/docs/reference/kubernetes-api/ 命令行工具参考查看

查看cat kube-controller-manager.conf文件

输出以下内容:

KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \ #配置日志
--v=2 \ #配置日志级别
--log-dir=/opt/kubernetes/logs \ #配置日志目录
--leader-elect=true \  #集群选举,api server才做高可用, kube-controller-manager本身会基于etcd来实现高可用,启用该选项即可
--master=127.0.0.1:8080 \  #apiserver的IP,我们设置链接本地,8080是apiserver监听端口,它默认会开放该端口
--address=127.0.0.1 \ #组件监听地址,本地即可,无需对外
--allocate-node-cidrs=true \
--cluster-cidr=10.244.0.0/16 \
--service-cluster-ip-range=10.0.0.0/24 \ #server的IP范围,和 kube-apiserverIP范围是一样的

#集群签名的证书,node加入集群颁发自动颁发kubelet证书,kubelet由controller-manager颁发,controller-manager由下面配置的颁发
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \
--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \

#签署service-account所需要的私钥
--root-ca-file=/opt/kubernetes/ssl/ca.pem \

--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \

#为node颁发证书时间,10年
--experimental-cluster-signing-duration=87600h0m0s"

查看cat kube-scheduler.conf文件

输出以下内容:

KUBE_SCHEDULER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--leader-elect \ #多个scheduler集群选举

--master=127.0.0.1:8080 \  #链接apiserver地址
--address=127.0.0.1" #监听本地地址

六、将证书复制到目录

cp /root/TLS/k8s/*.pem /root/kubernetes/ssl/

cp /root/TLS/k8s/*.pem /opt/kubernetes/ssl/

kube-proxy.pem在master不会使用,可以不用复制

七、配置文件

vi kube-apiserver.conf

我们需要在每台机器设置自己的IP,只需要修改apiserver.cnf即可,其他服务都是监听127.0.0.1的地址

八、将文件移动到工作目录

mv /root/kubernetes/ /opt/

mv kube-apiserver.service kube-controller-manager.service kube-scheduler.service /usr/lib/systemd/system

九、启动服务

systemctl start kube-apiserver

systemctl start kube-controller-manager

systemctl start kube-scheduler

十、查看日志

ls /opt/kubernetes/logs/

less /opt/kubernetes/logs/kube-apiserver.INFO
tail /opt/kubernetes/logs/kube-controller-manager.info

十一、设置开机启动

for i in $(ls /opt/kubernetes/bin/);do systemctl enable $i;done

也可以一个个单独设置,这里循环设置的;

十二、kubectl 移动到环境变量

mv /opt/kubernetes/bin/kubectl /usr/local/bin/

关于启动情况的排查:

ps -ef |grep *#查看启动进程

ps -ef |grep kube-apiserver

ps -ef |grep kube-controller-manager

ps -ef |grep kube-scheduler

#查看端口监听情况

netstat -ntlp

#查看日志

systemctl -l status kube-apiserver

systemctl -l status kube-controller-manager

systemctl -l status kube-scheduler

十三、查看启动的情况

kubectl get cs

输出以下结果:

NAME AGE
scheduler <unknown>
controller-manager <unknown>
etcd-1 <unknown>
etcd-2 <unknown>
etcd-0 <unknown>

十四、因为我们启动了bootstrap自动颁发证书,所以还需要对用户进行设置

cat /opt/kubernetes/cfg/token.csv

输出结果:

c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"[[email protected] k8s]#

结构:token,用户,uid,用户组

因为这个用户是没有权限的,需要我们在master1机器上给该用户授权

kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap

附录:

自己生成token

head -c 16 /dev/urandom | od -An -t x | tr -d ‘ ‘

但apiserver配置的token必须要与node节点bootstrap.kubeconfig配置里一致。

关于bootstrap.kubeconfig我们在下一节说明

原文地址:https://www.cnblogs.com/TSir/p/12238515.html

时间: 2024-07-29 10:53:34

Kubernetes(九)单Master 部署API Server、controller-manager、scheduler的相关文章

K8S单master部署三:APIserver+Controller-Manager+Schedul

以下所有操作均在master端进行 服务器角色分配 角色 地址 安装组件 master 192.168.142.220 kube-apiserver kube-controller-manager kube-scheduler etcd node1 192.168.142.136 kubelet kube-proxy docker flannel etcd node2 192.168.142.132 kubelet kube-proxy docker flannel etcd 一.APIserv

K8S单master部署一:环境规划、ETCD部署

实验环境规划 概述 使用VMwork虚拟机部署单master双node的小型集群,并且在master和node上都安装etcd来实现etcd集群. 软件采用版本 软件名称 版本 Linux系统 Linux version 4.8.5 Kubernetes 1.9 Docker Docker version 19.03.5 Etcd v3.3.10 服务器角色分配 角色 地址 安装组件 master 192.168.142.220 kube-apiserver kube-controller-ma

深度剖析Kubernetes API Server三部曲 - part 1

欢迎来到深入学习Kubernetes API Server的系列文章,在本系列文章中我们将深入的探究Kubernetes API Server的相关实现.如果你对Kubernetes 的内部实现机制比较感兴趣或者正在进行Kubernetes 项目的相关开发工作,那么本系列文章能够为你提供一些帮助.了解学习过go语言,会在某些方面帮助你更好的理解本系列文章.在本期文章中,我们首先会对Kubernetes API Server进行一个总体的大致说明,然后对API的技术术语及请求流作说明.在下几期的文

快速部署kubernetes单master集群-学习使用

五.ubuntu16/Centos7上部署安装k8s1.9(二进制包) 5.1 主机节点规划 角色 主机名 主机ip 组件 etcd etcd 192.168.0.106 etcd master kube-master 192.168.0.107 kube-apiserver,kube-controller-manager,kube-scheduler node1 kube-node1 192.168.0.108 kubelet,kube-proxy,docker node2 kube-node

kubernetes Master部署之Scheduler 以及 HA部署(5)

Kubernetes Scheduler作用是将Controller Manager将要新建的Pod按照特定的调度算法和调度策略绑定到集群中某个合适的Node上,并将绑定信息写入到etcd中. 一.部署Scheduler 下面生成kube-scheduler的kubeconfig文件,操作如下: cd /etc/kubernetes export KUBE_APISERVER="https://192.168.15.200:6443" 配置 cluster kubectl config

kubernetes Master部署之ControllerManager部署(4)

Controller Manager作为集群内部的管理控制中心,主要负责集群内的资源管理,包括Node.Pod.命名空间.额定资源等.比如当某个Node意外宕机,Controller Manager会及时发现并执行自动化修复. 一.部署k8s Controller Manager 确保controller-manager-key.pem 和 controller-manager.pem存在,我这里在前面的文章中已经创建好相关私钥.执行如下操作: cd /etc/kubernetes export

kubernetes API Server 权限管理实践

API Server 权限管理应用 API Server权限控制方式介绍 API Server权限控制分为三种:Authentication(身份认证).Authorization(授权).AdmissionControl(准入控制). 身份认证: 当客户端向Kubernetes非只读端口发起API请求时,Kubernetes通过三种方式来认证用户的合法性.kubernetes中,验证用户是否有权限操作api的方式有三种:证书认证,token认证,基本信息认证. 证书认证 设置apiserver

Kubernetes二进制部署之单节点部署

K8s单节点二进制部署 K8s二进制部署搭建步骤: 1:自签ETCD证书 2:ETCD部署 3:Node安装docker 4:Flannel部署(先写入子网到etcd) ---------master---------- 5:自签APIServer证书 6:部署APIServer组件(token,csv) 7:部署controller-manager(指定apiserver证书)和scheduler组件 ----------node---------- 8:生成kubeconfig(bootst

rancher server 单节点部署/K8S高可用部署

环境说明: # 操作系统:centos7 # docker版本:19.03.5 # rancher版本: latest # rancher server 节点IP :192.168.2.175 # rancher agent节点IP: 192.168.2.175,192.168.2.176,192.168.2.177,192.168.2.185,192.168.2.187 # K8S master 节点IP:192.168.2.176,192.168.2.177,192.168.2.185 #