K8S 二进制部署-4

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: K8S 二进制部署

九、master02 节点部署


//从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
scp -r /opt/etcd/ root@192.168.147.101:/opt/
scp -r /opt/kubernetes/ root@192.168.147.101:/opt
scp -r /root/.kube root@192.168.147.101:/root
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.147.101:/usr/lib/systemd/system/
//修改配置文件kube-apiserver中的IP
vim /opt/kubernetes/cfg/kube-apiserver
KUBE_APISERVER_OPTS="--logtostderr=true \
--v=2 \
--etcd-servers=https://192.168.10.80:2379,https://192.168.10.18:2379,https://192.168.10.19:2379 \
--bind-address=192.168.147.101 \        #修改
--secure-port=6443 \
--advertise-address=192.168.147.101 \     #修改
......

cf8d14c19b87489e8e8500dfa5ffc73e.png

//在 master02 节点上启动各服务并设置开机自启
systemctl start kube-apiserver.service
systemctl enable kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl enable kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service

e058dae08813489695869b6d994a0fbd.png

//查看node节点状态
ln -s /opt/kubernetes/bin/* /usr/local/bin/
kubectl get nodes
kubectl get nodes -o wide     #-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
//此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来

09f1220d742e4827bb176f9f0f33e4fc.png


十、负载均衡部署


配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)


在lb01、lb02节点上操作


//配置nginx的官方在线yum源,配置本地nginx的yum源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOF

1ec3d6af30cd4d06ab30717c7c3b5ff0.png

yum install nginx -y
//修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
vim /etc/nginx/nginx.conf
events {
    worker_connections  1024;
}
#添加
stream {
    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    access_log  /var/log/nginx/k8s-access.log  main;
upstream k8s-apiserver {
    server 192.168.147.100:6443;
    server 192.168.147.101:6443;
}
server {
    listen 6443;
    proxy_pass k8s-apiserver;
}
}
http {
......


8c99c2ca788c4d34b368d745be4fa70d.png


//检查配置文件语法
nginx -t   

7756478d627840d7a9dd558fe54dad1a.png


//启动nginx服务,查看已监听6443端口
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx 


c0d5db6de13b428fa860bfaa1f950ceb.png

76c8d4d7aebe4267b6e0718746ae29d5.png

//部署keepalived服务
yum install keepalived -y
//修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
接收邮件地址
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
邮件发送地址
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER #lb01节点的为 NGINX_MASTER,lb02节点的为 NGINX_BACKUP
}
#添加一个周期性执行的脚本
vrrp_script check_nginx {
    script "/etc/nginx/check_nginx.sh"  #指定检查nginx存活的脚本路径
}
vrrp_instance VI_1 {
    state MASTER      #lb01节点的为 MASTER,lb02节点的为 BACKUP
    interface ens33     #指定网卡名称 ens33
    virtual_router_id 51  #指定vrid,两个节点要一致
    priority 100      #lb01节点的为 100,lb02节点的为 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.147.200/24  #指定 VIP
    }
    track_script {
        check_nginx     #指定vrrp_script配置的脚本
    }
}
//创建nginx状态检查脚本 
vim /etc/nginx/check_nginx.sh
#!/bin/bash
#egrep -cv "grep|$$" 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程ID,即脚本运行的当前进程ID号
count=$(ps -ef | grep nginx | egrep -cv "grep|$$")
if [ "$count" -eq 0 ];then
    systemctl stop keepalived
fi
chmod +x /etc/nginx/check_nginx.sh

93f174c8931b4228b99e2d56b13d037f.png


//启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
systemctl start keepalived
systemctl enable keepalived
ip a        #查看VIP是否生成

3343092e9e814df3b184eb7132c022d8.png

//修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig 
server: https://192.168.147.200:6443
vim kubelet.kubeconfig
server: https://192.168.147.200:6443
vim kube-proxy.kubeconfig
server: https://192.168.147.200:6443
//重启kubelet和kube-proxy服务
systemctl restart kubelet.service 
systemctl restart kube-proxy.service
//在 lb01 上查看 nginx 和 node 、 master 节点的连接状态
netstat -natp | grep nginx
tcp        0      0 0.0.0.0:6443            0.0.0.0:*               LISTEN      15257/nginx: master 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15257/nginx: master 
tcp        0      0 192.168.147.106:57350   192.168.147.100:6443    ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.106:47768   192.168.147.101:6443    ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.106:47784   192.168.147.101:6443    ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.106:47796   192.168.147.101:6443    ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.105:54462   ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.106:57338   192.168.147.100:6443    ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.105:54456   ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.106:47776   192.168.147.101:6443    ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.106:47792   192.168.147.101:6443    ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.102:49827   ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.102:49868   ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.105:54470   ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.102:49872   ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.106:47770   192.168.147.101:6443    ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.106:57332   192.168.147.100:6443    ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.102:49866   ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.106:47780   192.168.147.101:6443    ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.102:49874   ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.106:57348   192.168.147.100:6443    ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.102:49884   ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.106:57354   192.168.147.100:6443    ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.105:54466   ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.105:54468   ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.106:47786   192.168.147.101:6443    ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.105:54458   ESTABLISHED 15258/nginx: worker 
tcp        0      0 192.168.147.106:57324   192.168.147.100:6443    ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.105:54438   ESTABLISHED 15259/nginx: worker 
tcp        0      0 192.168.147.200:6443    192.168.147.102:49864   ESTABLISHED 15258/nginx: worker 

1aa943d2549845169ab873dc79fd63f0.png


在 master01 节点上操作
//测试创建pod
kubectl run nginx --image=nginx
//查看Pod的状态信息
kubectl get pods
NAME                    READY   STATUS              RESTARTS   AGE
nginx-dbddb74b8-nf9sk   0/1     ContainerCreating   0          33s   #正在创建中
kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-nf9sk   1/1     Running   0          80s        #创建完成,运行中
kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE    IP            NODE              NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          3m4s   10.244.1.15   192.168.147.105   <none>           <none>
//READY为1/1,表示这个Pod中有1个容器

5796ee81229f40b5b557def8abe21fb8.png

//在对应网段的node节点上操作,可以直接使用浏览器或者curl命令访问
curl 10.244.1.15
//这时在master01节点上查看nginx日志
kubectl logs nginx-dbddb74b8-nf9sk


d2e8a9cc99eb4d849e98cc342e302b10.png


十一、部署 Dashboard


Dashboard 介绍

仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)。例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。

//在 node 上操作
#上传dashboard.tar和metrics-scraper.tar 到 /opt 下
scp dashboard.tar metrics-scraper.tar node02:/opt/
docker load -i dashboard.tar
docker load -i metrics-scraper.tar
//在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8s
vim recommended.yaml
#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
   - port: 443
     targetPort: 8443
     nodePort: 30001     #添加
       type: NodePort          #添加
       selector:
         k8s-app: kubernetes-dashboard
kubectl apply -f recommended.yaml

72c04ca64df6435c8f3e8a075f432a8a.png


#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

35324dbaec3042aa9909511c28de3a13.png



#使用输出的token登录Dashboard
https://192.168.147.102:30001

c476ca8ede63453cb95e0296555eb83a.png


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
14天前
|
存储 Kubernetes 容器
K8S部署nexus
该配置文件定义了Nexus 3的Kubernetes部署,包括PersistentVolumeClaim、Deployment和服务。PVC请求20Gi存储,使用NFS存储类。Deployment配置了一个Nexus 3容器,内存限制为6G,CPU为1000m,并挂载数据卷。Service类型为NodePort,通过30520端口对外提供服务。所有资源位于`nexus`命名空间中。
|
19天前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
185 10
|
3月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
147 60
|
3月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
280 62
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
62 0
|
3月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
99 3
|
3月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
56 2
|
3月前
|
Kubernetes 网络安全 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
365 2

热门文章

最新文章