centos7 kubernetes(k8s)1.12集群部署与使用(三):master节点部署

这篇博客介绍了如何在CentOS7上手动部署kubernetes 1.12集群的Master节点,包括API服务、Controller Manager、Scheduler的部署以及kubectl命令行工具的设置。详细步骤涵盖了证书生成、服务配置等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

    上一篇为大家记录了CA证书的制作和etcd集群的部署,这一篇,我们进行master节点的部署,共分为三个服务,apiserver,scheduler,controller-manager,具体的作用在第一篇就讲过了,这里不赘述了,照例,下面先是导航

ps: 为了更好的让大家理解集群的整个结构,整个系列部署都是采用二进制包手动部署方式。

   整个系列具体会出多少篇博客,也不一定,每有更新,便会在每篇博客的开头,进行导航:

centos7 kubernetes(k8s)1.12集群部署与使用(一):基础知识介绍和系统初始化

centos7 kubernetes(k8s)1.12集群部署与使用(二):证书制作和etcd集群部署

centos7 kubernetes(k8s)1.12集群部署与使用(三):master节点部署

centos7 kubernetes(k8s)1.12集群部署与使用(四):Node节点部署

centos7 kubernetes(k8s)1.12集群部署与使用(五):Flannel网络部署

 

 

正文

整个系列环境:

centos7 服务器3台   1master + 2node  

master  ip: 192.168.1.1

node1   ip: 192.168.1.2

node2   ip: 192.168.1.3

 

    好的,下面开始部署master节点

部署Kubernetes API服务部署

1. 准备软件包

# 在master上操作
cd /usr/local/src/kubernetes
cp server/bin/kube-apiserver /opt/kubernetes/bin/
cp server/bin/kube-controller-manager /opt/kubernetes/bin/
cp server/bin/kube-scheduler /opt/kubernetes/bin/

 

2. 创建生成CSR的 JSON 配置文件

# 在master上 /usr/local/src/ssl 目录下操作

vim kubernetes-csr.json
------------------------------------------------------------
{
  "CN": "kubernetes",
  "hosts": [
    "127.0.0.1",
    "192.168.1.1",  # 将master节点的ip填上
    "10.5.0.1",   # 这里需要解释一下,具体看下面文字
    "kubernetes",
    "kubernetes.default",
    "kubernetes.default.svc",
    "kubernetes.default.svc.cluster",
    "kubernetes.default.svc.cluster.local"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",  # 都可自定义,下同
      "ST": "ShenZhen",
      "L": "ShenZhen",
      "O": "k8s",
      "OU": "system"
    }
  ]
}
------------------------------------------------------------

    上面的10.5.0.1 ip,是指定kubernetes服务的service ip,这个要涉及到kubernetes的网络知识了,这里简单说一下,整个集群在部署时会设置两个网段,一个时pod所在的网段,所有kubernetes集群中的pod,都会被分配一个此网段的ip,每个pod就可以通过这个ip来实现跨node节点的相互访问,因为pod生产的时候是更具node节点的负载情况随机在node上创建的,所以需要一个统一的网段来实现pod之间的互访,这在后面进行 flannel 的部署的时候也会讲到。 

    除此之外,还有一个网段,用于实现负载均衡的网段,例如多个相同的pod,部署这同样一个web,可以通过设置一个service来实现负载均衡,其中的原理就是通过产生一个服务ip,然后将这个ip通过iptab或者ipvs转发到不同的pod中去,以此来实现负载均衡,而这个service ip的网段是一个新的网段,跟pod所处的网段区别开来。

    这样两个网段就构成了kubernetes网络的基础结构。上面定义的 10.5.0.1就是service ip,也就是10.5.0.0/16 是我这里定义的service ip的网段。这两个网段都是自定义的,我定义的网段是10.5.0.0/16为service ip网段,10.6.0.0./16为pod的网段。这定义了之后,后面很多服务部署时需要指定的,预定定义后,就不能变。

 

3. 生成 kubernetes 证书和私钥

# 在master上操作
cd /usr/local/src

cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
   -ca-key=/opt/kubernetes/ssl/ca-key.pem \
   -config=/opt/kubernetes/ssl/ca-config.json \
   -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

# 生成证书后,分发到各个节点上
cp kubernetes*.pem /opt/kubernetes/ssl/
scp kubernetes*.pem 192.168.1.2:/opt/kubernetes/ssl/
scp kubernetes*.pem 192.168.1.3:/opt/kubernetes/ssl/

 

4. 创建 kube-apiserver 使用的客户端 token 文件

# 在master上操作
# 以下命令生成16位随机token
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
# 输出
16efd754307d33fe6835fce45d52d6b7

# 将这个随机token记录下来,创建token文件
vim /opt/kubernetes/ssl/bootstrap-token.csv
-----------------------------------------------------------------------------------
16efd754307d33fe6835fce45d52d6b7,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
-----------------------------------------------------------------------------------

 

5.创建基础用户名/密码认证配置

# 在master上操作
vim /opt/kubernetes/ssl/basic-auth.csv
------------------------------------------
admin,admin,1
readonly,readonly,2
------------------------------------------

 

6.部署Kubernetes API Server

# 在master上操作

vim /usr/lib/systemd/system/kube-apiserver.service
--------------------------------------------------------------------------------
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
ExecStart=/opt/kubernetes/bin/kube-apiserver \
  --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,NodeRestriction \
  --bind-address=192.168.1.1 \
  --insecure-bind-address=127.0.0.1 \
  --authorization-mode=Node,RBAC \
  --runtime-config=rbac.authorization.k8s.io/v1 \
  --kubelet-https=true \
  --anonymous-auth=false \
  --basic-auth-file=/opt/kubernetes/ssl/basic-auth.csv \
  --enable-bootstrap-token-auth \
  --token-auth-file=/opt/kubernetes/ssl/bootstrap-token.csv \
  --service-cluster-ip-range=10.5.0.0/16 \   # 这里定义上面说的service ip网段
  --service-node-port-range=20000-40000 \    # 这里指定所有node节点,开放端口范围
  --tls-cert-file=/opt/kubernetes/ssl/kubernetes.pem \
  --tls-private-key-file=/opt/kubernetes/ssl/kubernetes-key.pem \
  --client-ca-file=/opt/kubernetes/ssl/ca.pem \
  --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
  --etcd-cafile=/opt/kubernetes/ssl/ca.pem \
  --etcd-certfile=/opt/kubernetes/ssl/kubernetes.pem \
  --etcd-keyfile=/opt/kubernetes/ssl/kubernetes-key.pem \
  --etcd-servers=https://192.168.1.1:2379,https://192.168.1.2:2379,https://192.168.1.3:2379 \
  --enable-swagger-ui=true \
  --allow-privileged=true \
  --audit-log-maxage=30 \
  --audit-log-maxbackup=3 \
  --audit-log-maxsize=100 \
  --audit-log-path=/opt/kubernetes/log/api-audit.log \
  --event-ttl=1h \
  --v=2 \
  --logtostderr=false \
  --log-dir=/opt/kubernetes/log
Restart=on-failure
RestartSec=5
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
--------------------------------------------------------------------------------

 

7.启动API Server服务

# 在master上操作

systemctl daemon-reload
systemctl enable kube-apiserver
systemctl start kube-apiserver
systemctl status kube-apiserver

 

ok, API Server 部署完成

部署Controller Manager服务

# 在master上操作

vim /usr/lib/systemd/system/kube-controller-manager.service
-----------------------------------------------------------------------------
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes

[Service]
ExecStart=/opt/kubernetes/bin/kube-controller-manager \
  --address=127.0.0.1 \
  --master=http://127.0.0.1:8080 \
  --allocate-node-cidrs=true \
  --service-cluster-ip-range=10.5.0.0/16 \   # 这里是service ip网段
  --cluster-cidr=10.6.0.0/16 \    # 这里是pod的网段,这两个网段都是自定义的
  --cluster-name=kubernetes \
  --cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \
  --cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \
  --service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \
  --root-ca-file=/opt/kubernetes/ssl/ca.pem \
  --leader-elect=true \
  --v=2 \
  --logtostderr=false \
  --log-dir=/opt/kubernetes/log

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
-----------------------------------------------------------------------------


# 启动Controller Manager
systemctl daemon-reload
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl status kube-controller-manager

 

ok,这就部署完了Controller Manager,然后继续

部署Kubernetes Scheduler

# 在master上操作

vim /usr/lib/systemd/system/kube-scheduler.service
--------------------------------------------------------------
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes

[Service]
ExecStart=/opt/kubernetes/bin/kube-scheduler \
  --address=127.0.0.1 \
  --master=http://127.0.0.1:8080 \
  --leader-elect=true \
  --v=2 \
  --logtostderr=false \
  --log-dir=/opt/kubernetes/log

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
--------------------------------------------------------------


# 启动scheduler 服务
systemctl daemon-reload
systemctl enable kube-scheduler
systemctl start kube-scheduler
systemctl status kube-scheduler

 

ok,scheduler 服务就部署完了,然后还需要部署一个kubectl的命令行工具,也就是一个访问客户端,用于访问api server来操作kubernernets集群。

部署kubectl 命令行工具

1.准备二进制命令包

# 在master上操作
cd /usr/local/src/kubernetes/client/bin
cp kubectl /opt/kubernetes/bin/

 

2.创建 admin 证书签名请求

# 在master上操作

cd /usr/local/src/ssl/
vim admin-csr.json
---------------------------------------------------
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",  # 一样,下面都是可以自定义的
      "ST": "ShenZhen",
      "L": "ShenZhen",
      "O": "k8s",
      "OU": "system"
    }
  ]
}
---------------------------------------------------

 

3. 生成 admin 证书和私钥

# 在master上操作

cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
   -ca-key=/opt/kubernetes/ssl/ca-key.pem \
   -config=/opt/kubernetes/ssl/ca-config.json \
   -profile=kubernetes admin-csr.json | cfssljson -bare admin

ls -l admin*
-rw-r--r-- 1 root root 1013 Jan 8 15:15 admin.csr
-rw-r--r-- 1 root root  232 Jan 8 15:15 admin-csr.json
-rw------- 1 root root 1675 Jan 8 15:15 admin-key.pem
-rw-r--r-- 1 root root 1415 Jan 8 15:15 admin.pem

# 移动证书到统一目录
mv admin*.pem /opt/kubernetes/ssl/

 

4. 设置集群参数

# 在master上操作

kubectl config set-cluster kubernetes \
   --certificate-authority=/opt/kubernetes/ssl/ca.pem \
   --embed-certs=true \
   --server=https://192.168.1.1:6443

 

5. 设置客户端认证参数

# 在master上操作

kubectl config set-credentials admin \
   --client-certificate=/opt/kubernetes/ssl/admin.pem \
   --embed-certs=true \
   --client-key=/opt/kubernetes/ssl/admin-key.pem

 

6.设置上下文参数

# 在master上操作

kubectl config set-context kubernetes \
   --cluster=kubernetes \
   --user=admin

 

7. 设置默认上下文

# 在master上操作

kubectl config use-context kubernetes

 

8. 测试使用kubectl工具

# 在master上操作
kubectl get cs
# 输出类似如下则正常
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"}   
etcd-1               Healthy   {"health": "true"}   
etcd-2               Healthy   {"health": "true"}  

 

结束

    ok,到此,master节点就部署完成了,一共部署了三个服务和一个客户端工具。下一篇继续进行 node节点的部署。有任何问题或不明白或建议都欢迎大家留言指出。

 

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值