【实战加详解】二进制部署k8s高可用集群教程系列九 -部署 scheduler

[!TIP]
二进制部署 k8s - 部署 kube-scheduler


转载请注明出处:https://janrs.com

部署 kube-scheduler

kube-scheduler 作为 kube-apiserver 的调度器,需要访问 kube-apiserver 的服务,所以需要 kube-apiserverca
机构为其签发客户端 client 证书。




这里 kube-controller 部署在 kube-apiserver 的服务器上,不单独部署。


ip 设置成 kube-apiserver 的一样的就行。

1.生成 ssl 证书

1-1.创建 csr 请求文件

[!NOTE]
CN 参数表示用户名,必须设置为 k8s 中设定的 system:kube-scheduler

O 参数表示用户组,必须设置为 k8s 中设定的 system:kube-scheduler

kubernetes 内置的 ClusterRoleBindings 中,system:kube-scheduler 赋予 kube-scheduler
工作所需的权限。

kube-schduler 同样作为客户端,不需要设置 hosts 参数。

cat > /ssl/apiserver-scheduler-client-csr.json <<EOF
{
    "CN": "system:kube-scheduler",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing",
            "O": "system:kube-scheduler",
            "OU": "system"
        }
    ]
}
EOF
cd /ssl/ && \
cfssl gencert \
-ca=apiserver-ca.pem \
-ca-key=apiserver-ca-key.pem \
-config=ca-config.json \
-profile=client apiserver-scheduler-client-csr.json | \
cfssljson -bare apiserver-scheduler-client && \
ls apiserver-scheduler-client* | \
grep apiserver-scheduler-client

2.分发证书

scp /ssl/apiserver-scheduler-client*.pem root@172.16.222.121:/etc/kubernetes/pki/apiserver/ && \

scp /ssl/apiserver-scheduler-client*.pem root@172.16.222.122:/etc/kubernetes/pki/apiserver/ && \

scp /ssl/apiserver-scheduler-client*.pem root@172.16.222.123:/etc/kubernetes/pki/apiserver/

3.创建 kubeconfig

[!NOTE]
kube-scheduler 是使用 kubeconfigkube-apiserver 进行通信的。

kubeconfig 配置文件中会包含了 kube-scheduler 的客户端 client 证书信息以及身份信息。



需要在每台服务器都创建该请求文件。

以下操作在每台 master 服务器创建,ip 地址设置为本地的 kube-apiserver 的服务地址 ip

3-1.在 master-01 创建

设置集群参数

kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--embed-certs=true \
--server=https://172.16.222.121:6443 \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置客户端认证参数

kubectl config set-credentials system:kube-scheduler  \
--client-certificate=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client.pem \
--client-key=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置上下文参数

kubectl config set-context system:kube-scheduler \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置当前上下文参数

kubectl config use-context system:kube-scheduler \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

3-2.在 master-02 创建

设置集群参数

kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--embed-certs=true \
--server=https://172.16.222.122:6443 \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置客户端认证参数

kubectl config set-credentials system:kube-scheduler  \
--client-certificate=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client.pem \
--client-key=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置上下文参数

kubectl config set-context system:kube-scheduler \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置当前上下文参数

kubectl config use-context system:kube-scheduler \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

3-3.在 master-03 创建

设置集群参数

kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--embed-certs=true \
--server=https://172.16.222.123:6443 \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置客户端认证参数

kubectl config set-credentials system:kube-scheduler  \
--client-certificate=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client.pem \
--client-key=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置上下文参数

kubectl config set-context system:kube-scheduler \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

设置当前上下文参数

kubectl config use-context system:kube-scheduler \
--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig

4.启动服务

4-1.创建启动配置文件

[!NOTE]
每台 master 服务器都要创建。每台服务器的启动配置文件一样。




注意:以下的配置中,日志等级设置为:4。日志产生的速度会非常快。学习部署后可以设置为:2

cat > /etc/kubernetes/config/scheduler.conf <<EOF
KUBE_SCHEDULER_OPTS="--bind-address=127.0.0.1 \

--secure-port=10259 \

--client-ca-file=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \

--tls-cert-file=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client.pem \

--tls-private-key-file=/etc/kubernetes/pki/apiserver/apiserver-scheduler-client-key.pem \

--kubeconfig=/etc/kubernetes/kubeconfig/scheduler.kubeconfig \

--leader-elect=true \

--alsologtostderr=true \

--logtostderr=false \

--log-dir=/var/log/kubernetes/scheduler/ \

--v=4"
EOF

4-2.创建服务启动项

[!NOTE]
需要在每台 master 服务器创建。每台服务器的启动项一样。

cat > /usr/lib/systemd/system/kube-scheduler.service <<'EOF'
[Unit]
Description=Kubernetes Scheduler Service
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=-/etc/kubernetes/config/scheduler.conf
ExecStart=/usr/local/bin/kube-scheduler $KUBE_SCHEDULER_OPTS
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

5.启动服务

启动服务

systemctl daemon-reload && \
systemctl start kube-scheduler

6.验证

使用 kubectl 查看 kube-apiserver 是否可以访问到 kube-scheduler

kubectl get cs

显示

[!NOTE]
可以看到 kube-controller-managerkube-schedulerSTATUS 都为 Healthy

Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok
etcd-0               Healthy   {"health":"true","reason":""}
etcd-1               Healthy   {"health":"true","reason":""}
etcd-2               Healthy   {"health":"true","reason":""}
scheduler            Healthy   ok

7.设置开机启动

正常启动且没有任何错误,设置开机自动启动服务。

systemctl enable kube-scheduler

8.其他操作

停止服务

systemctl stop kube-scheduler

查看状态

systemctl status kube-scheduler

查看服务运行状态

journalctl -l --no-pager  -u kube-scheduler

至此。kube-scheduler 部署成功。

转载请注明出处:https://janrs.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、安装准备: 1.环境 主机名 IP k8s-master 192.168.250.111 k8s-node01 192.168.250.112 k8s-node02 192.168.250.116 2.设置主机名 hostnamectl --static set-hostname k8s-master hostnamectl --static set-hostname k8s-node01 hostnamectl --static set-hostname k8s-node02 3.关闭防火墙和selinux systemctl disable firewalld systemctl stop firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 执行完成后重启虚拟机。 4.在master机器上安装ansible 执行命令:sudo yum install ansible (离线处理补充) 5.配置 ansible ssh密钥登录,此操作需要在所有机器上执行 ssh-keygen -t rsa -b 2048 回车 回车 回车 ssh-copy-id $IP #$IP为所有虚拟机,按照提示输入yes 和root密码 (密钥补充) 二、安装kubernetes集群 进入ansible安装路径 : cd /etc/ansible 将路径下的roles文件夹和hosts文件删除。 解压压缩文件kubeasz.zip文件,将解压后的内容放入当前目录下(/etc/ansible) 根据搭建集群环境要求,进入/etc/ansible/example 目录下选取 hosts.allinone.example 单节点AllInOne hosts.m-masters.example 单主多节点 hosts.s-master.example 多主多节点 红色标记的是需要自行修改的地方 修改完成后将文件名改为hosts 放入/etc/ansible/目录下。 安装prepare ansible-playbook 01.prepare.yml 安装etcd ansible-playbook 02.etcd.yml 安装kubectl命令 ansible-playbook 03.kubectl.yml 安装docker ansible-playbook 04.docker.yml 如果执行时出现报错: 可忽略。 解决方法: 在master节点上执行:curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '."results"[]["name"]' |sort 所有机器上执行: wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm yum install jq -y 在重新执行: ansible-playbook 04.docker.yml 安装calico ansible-playbook 05.calico.yml 部署master节点 ansible-playbook 06.kube-master.yml 入node节点 ansible-playbook 07.kube-node.yml 如果执行成功,k8s集群就安装好了。 三、验证安装 如果提示kubectl: command not found,退出重新ssh登陆一下,环境变量生效即可 kubectl version #查看kubernetes版本 kubectl get componentstatus # 可以看到scheduler/controller-manager/etcd等组件 Healthy kubectl cluster-info # 可以看到kubernetes master(apiserver)组件 running kubectl get node # 可以看到单 node Ready状态 kubectl get pod --all-namespaces # 可以查看所有集群pod状态 kubectl get svc --all-namespaces # 可以查看所有集群服务状态 calicoctl node status # 可以在master或者node节点上查看calico网络状态 四、安装主要组件 安装kubedns kubectl create -f manifests/kubedns 安装heapster kubectl create -f manifests/heapster 安装dashboard kubectl create -f manifests/dashboard 访问dashboard 先执行命令查看dashboard的NodePort 端口 kubectl get svc -n kube-system 访问web页面 https://masterIP: 7443 选择令牌按钮 ,用命令查询登录令牌 之前安装过 heapster 执行命令:kubectl get secret -n kube-system 查询 heapster-token-twpw4 的详细内容 执行命令:kubectl describe secret heapster-token-twpw4 -n kube-system Token就是登录令牌,复制登录就好了 安装ingress kubectl create -f manifests/ingress/ 安装EFK(elasticsearch+ fluentd + kibana) 首先进入 manifests/EFK 文件夹下 (cd /etc/ansible/manifests/EFK) 查看并修改 ceph-sercet.yaml 文件。 此key值是 ceph存储用户的token值 ,将此key值转换为base64 将文件中红色选选中部分修改为转换后的值。 修改完成后 部署 pv 和 pvc 执行命令:kubectl create -f es-pv-data.yaml kubectl create -f es-pvc-data.yaml 部署fluentd 执行命令:kubectl create -f fluentd-rbac.yml -f fluentd-configmap.yml -f fluentd-daemonset.yml 部署elasticsearch 先设置node节点中role ,指定master client data 部署位置 执行命令:kubectl get nodes kubectl label node 10.2.0.244 role=master (10.2.0.244 是我本机kubernetes 的master节点 ,所以我也将此master也部署在这里) 其余的两个节点分别是data 和 client 执行命令:kubectl create -f es-discovery-svc.yaml -f es-svc.yaml -f es-master.yaml -f es-client.yaml -f es-data.yaml 其中部署elasticsearch集群需要注意一些事项 : Master节点一般只有一个 并且提供9300 端口 客户端通讯使用 Client 节点一般提供9200端口 用于连接kibana 和 fluentd http访问使用 Data 节点是提供数据存储,持久化对data节点进行就可以。 其中 master , client , data 部署文件中 配置的 CLUSTER_NAME 指的是 elasticsearch集群名称 Java运行自行设置,最大值和最小值需要一致。 最小为-Xms256m 部署kibana 执行命令:kubectl create -f kibana-svc.yaml -f kibana.yaml 这里需要注意 kibana.yaml 文件中 参数的设置 这里的CLUSTER_NAME 也是elasticsearch部署文件中设置的集群名称。 #安装 flannel 执行命令: cd /etc/ansible/roles/flannel 先修改kube-flannel.yml文件 --iface 对应的是本机的网卡名称 command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth1" ] 修改完成后 执行: kubectl create -f kube-flannel-rbac.yml kubectl apply -f kube-flannel.yml
k8s(Kubernetes)是一个开源的容器编排系统,它可以自动化地部署、扩展和操作容器化的应用程序。k8s二进制可用集群部署是指在生产环境中使用k8s二进制文件手动部署可用的k8s集群。 首先,需要准备三台或以上的服务器,并为每台服务器安装好操作系统(如Ubuntu、CentOS等)。然后,从kubernetes官网下载对应版本的k8s二进制文件,并在每台服务器上进行解压和配置。在配置过程中,需要为每个节点创建和配置kubelet、kube-controller-manager、kube-scheduler和kube-apiserver等组件,同时配置etcd集群用于存储集群的元数据。 接下来,需要配置网络插件(如Flannel或Calico)用于实现容器之间的通信和网络隔离。此外,还需要配置负载均衡器(如Nginx、HAProxy)来将流量均衡到k8s集群中的各个节点上。 在部署完集群后,需要进行一系列的测试和验证工作,确保集群的可用性和稳定性。这包括检查节点之间的通信、集群中各组件的健康状态、容器的调度和网络连接等方面。 最后,需要配置监控和日志系统(如Prometheus、Grafana、ELK等)来实时监控和收集集群的运行状态和日志信息。此外,还可以考虑配置自动化运维工具(如Ansible、Terraform)来简化集群的管理和维护工作。 通过以上步骤,就可以实现k8s二进制可用集群的部署和运维工作。这样就可以保证在生产环境中,k8s集群能够实现可用性、稳定性和可扩展性,满足企业应用程序的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值