k8s下篇

    技术2025-12-09  7

    k8s

    9,安装coredns和远程管理组件10,kubectl使用和创建development11,查看pod12,服务伸缩13,项目篇:项目迁移k8s

    9,安装coredns和远程管理组件

    找到

    ####远程管理工作节点

    回到worker2

    worker节点不能管理集群吗? 不,他可以

    1,将管理工具复制到worker master下执行scp刚才执行过了

    2,生成管理员证书

    颁发admin证书

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

    3,创建kubeconfig文件 (1)设置集群参数

    kubectl config set-cluster kubernetes --server=https://192.168.1.106:6443 --certificate-authority=ca.pem --embed-certs=true --kubeconfig=config

    (2)设置客户端认证参数

    kubectl config set-credentials cluster-admin --certificate-authority=ca.pem --embed-certs=true --client-key=admin-key.pem --client-certificate=admin.pem --kubeconfig=config

    (3)设置上下文参数

    kubectl config set-context default --cluster=kubernetes --user=cluster-admin --kubeconfig=config kubectl config use-context default --kubeconfig=config

    cat config可以看到秘钥

    (4)将生产的config文件发送到worker节点【master执行】

    scp config root@k8s-node2:/root/

    (5)切换到worker2节点

    可以看到config文件

    mv /root/config /root/.kube/

    ######这个文件是所有文件中最重要的。。。妥善保管

    10,kubectl使用和创建development

    先配置k8s-master2集群

    1)初始化服务器

    [root@k8s-master2 ~]# hostnamectl set-hostname k8s-master2 [root@k8s-master2 ~]# systemctl stop firewalld [root@k8s-master2 ~]# systemctl disable firewalld [root@k8s-master2 ~]# getenforce 0 [root@k8s-master2 ~]# vim /etc/selinux/config [root@k8s-master2 ~]# [root@k8s-master2 ~]# swapoff -a [root@k8s-master2 ~]# vim /etc/fstab [root@k8s-master2 ~]# vim /etc/hosts [root@k8s-master2 ~]# yum install chrony -y [root@k8s-master2 ~]# vim /etc/chrony.conf [root@k8s-master2 ~]# systemctl restart chronyd [root@k8s-master2 ~]# systemctl enable chroynd [root@k8s-master2 ~]# systemctl enable chronyd [root@k8s-master2 ~]# [root@k8s-master2 ~]# chronyc sources

    安装k8s组件 为了简单,从master1上复制配置好的k8s组件

    [root@k8s-master1 ~]# scp -r /opt/etcd/ root@k8s-maste2:/opt/ [root@k8s-master1 ~]# scp -r /opt/kubernetes root@k8s-master2:/opt/ [root@k8s-master1 ~]# cd /usr/lib/systemd/system [root@k8s-master1 system]# scp kube-apiserver.service kube-controller-manager.service kube-scheduler.service root@k8s-master2:/usr/lib/systemd/system [root@k8s-master1 system]# scp /bin/kubectl root@k8s-master2:/bin/ 在master2上修改apiserver的配置文件 [root@k8s-master2 ~]# vi /opt/kubernetes/cfg/kube-apiserver.conf 修改两行:分别制定当前节点自己监听的IP --bind-address=192.168.31.64 \ --advertise-address=192.168.31.64 \ 启动master2的服务了 [root@k8s-master2 ~]# systemctl daemon-reload [root@k8s-master2 ~]# systemctl restart kube-apiserver [root@k8s-master2 ~]# systemctl restart kube-controller-manager [root@k8s-master2 ~]# systemctl restart kube-scheduler [root@k8s-master2 ~]# systemctl enable kube-apiserver [root@k8s-master2 ~]# systemctl enable kube-controller-manager [root@k8s-master2 ~]# systemctl enable kube-scheduler 检查是否启动成功 [root@k8s-master2 ssl]# ps aux | grep kube [root@k8s-master2 ssl]# kubectl get nodes 分别在master1和master2上安装 yum install -y keepalived haproxy vi /etc/haproxy/haproxy.cfg

    再修改

    vi /etc/keepalived/keepalived.conf

    router_id 必须为服务名 virtual_ipaddress配置backend的vip端口。也就是master2的

    master2同理 只是加一个nopreempt

    devops python docker+k8s git+jenkins

    k8s docker docker 三剑客(compose,swam、machine)

    pod 与 pod控制器 一个pod中是一个或者多个容器 pod控制器是用来控制、管理pod的数量、状态

    service 由于pod的地址会发生改变,通过service 可以为pod提供一个统一的访问入口

    整个k8s集群的service与pod之间的关系

    ####kubectl的使用

    创建development

    查看pod状态

    没有启动。使用命令查看此镜像

    如果无法启动镜像创建容器就 在工作节点中

    systemctl daemon-reload systemctl restart docker systemctl restart kubelet systemctl restart kube-proxy

    这样算拉下来了

    创建nginx镜像

    查看被调度到了哪个节点

    查看该节点剩余空间

    dishboard使用

    第三种创建容器方式

    效果跟图形化界面创建一样。建议用第二种方式创建容器

    这个报错是templete那里单词写错,还有spec

    11,查看pod

    常见的pod操作

    kubectl get 资源类型 kubectl describe 资源类型 kubectl logs 显示pod中的容器中运行过程中产生的日志信息 kubectl exec -it pod对象 /bin/sh

    资源类型: node pod service deployment ns ....

    查看有哪些名称空间

    指定查看哪一个名称空间的

    查看所有名称空间的pod

    最常用的最全的pod命令 describe

    默认下去default找。如果是其他名称空间则需 指定 -n 名称空间

    进入容器的方式

    发布应用

    1,用service来发布服务

    port:pod和service通信的端口 nodePort:是客户访问的端口 targetPort:service转发客户访问数据包到pod的端口

    创建容器

    kubectl apply -f ngx_svc.yml

    查看服务

    kubectl get service

    worker节点的任意节点访问32002端口都可以访问到nginx

    kuboard对于service的配置

    专门设置端口的

    12,服务伸缩

    启动更多的服务就是这里的值改大

    图形化界面也可以实现弹性伸缩

    敏捷开发之滚动更新

    多个容器的依次变化

    可以看到nginx镜像版本是1.8

    如何实现滚动更新

    然后就开始滚动更新了

    kuboard滚动更新

    13,项目篇:项目迁移k8s

    将一个Java 项目迁移到k8s

    物理机交付。。。开发交付的是源码。。。。而k8s环境下交付的是镜像

    1,准备一个mysql的服务器 将这两个tar包放到root下

    运行环境镜像。。。。。是那个tomcat-base-images.tar.gz

    把运行环境镜像放到所有的节点上

    执行docker命令导入tar包

    将java代码放入master节点上面

    ####关于master节点如何变为工作节点+master节点的,不清楚。查阅无果

    进入到java代码中 db文件夹就是数据库sql文件 src就是我们的代码

    改数据库链接和密码

    把sql文件放到数据库那个服务器上

    2,回到数据库服务器这边, (1)安装mariadb

    直接进入mysql

    这边创建数据库mydb,master这边配置文件改成mydb

    导入sql

    需要连接mysql

    创建用户并授权 用户名授权test 密码123

    刷新授权

    3,将demo构建到tomcat镜像中 (1)装jdk (2)装maven

    (3)到这个目录下

    执行mvn操作

    4,dockerFile

    add是制作镜像时候执行的命令 run是容器启动时执行的命令

    5,使用dockerfile构建镜像

    构建镜像成功

    让所有节点都能使用这个镜像

    6,启动镜像----》pod master节点上

    点击就执行了

    –dry-run启动干跑模式。。。。。测试能不能这条命令通过

    ####这里通过yml文件方式启动pod,非常重要

    #这里可以配置镜像拉取策略:没有的时候才拉取

    7,服务端口暴露与发布

    已干跑模式执行。暴露三个端口。。。。保存yml文件

    任意一个node节点。。。。访问。。。任意节点的31043

    Processed: 0.009, SQL: 9