小水玩转K8S(Kubernetes)---CentOS7下Kubernetes部署
citgpt 2024-10-02 13:25 15 浏览 0 评论
OS:CentOS7 最小化安装
简介
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
架构说明
kubernetes集群组件:
etcd 一个高可用的K/V键值对存储和服务发现系统 flannel 实现夸主机的容器网络的通信 kube-apiserver 提供kubernetes集群的API调用 kube-controller-manager 确保集群服务 kube-scheduler 调度容器,分配到Node kubelet 在Node节点上按照配置文件中定义的容器规格启动容器 kube-proxy 提供网络代理服务
规划
开始部署
1.各节点配置(3个节点)
设置hosts
cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.165 master 192.168.0.166 node1 192.168.0.153 node2
设置主机名
[root@master ~]# hostnamectl set-hostname master [root@node1 ~]# hostnamectl set-hostname node1 [root@node2 ~]# hostnamectl set-hostname node2
设置防火墙和selinux
systemctl disable firewalld systemctl stop firewalld grep -v ^# /etc/selinux/config SELINUX=disabled SELINUXTYPE=targeted
设置时间同步
yum -y install epel-release ntp ntpdate ntp1.aliyun.com hwclock -w systemctl start ntpd;systemctl enable ntpd
2.master节点部署
安装服务
[root@master ~]# yum install -y etcd kubernetes-master flannel
配置etcd服务器
[root@master ~]# grep -v '^#' /etc/etcd/etcd.conf ETCD_NAME=etcd1 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379" ETCD_LISTEN_PEER_URLS="http://192.168.0.165:2380" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.165:2380" #启动服务 [root@master ~]# systemctl start etcd;systemctl enable etcd #查看状态 [root@master ~]# etcdctl cluster-health member 9e9e56c5786er9gf is healthy: got healthy result from http://192.168.0.163:2379 cluster is healthy #etcd集群成员列表 [root@master ~]# etcdctl member list 9e9e56c5786er9gf: name=default peerURLs=http://localhost:2380 clientURLs=http://192.168.0.163:2379 isLeader=true
配置kube-apiserver
[root@master ~]# grep -v '^#' /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://192.168.0.163:8080" [root@master ~]# grep -v '^#' /etc/kubernetes/apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.163:2379" #docker容器的地址段 KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit" KUBE_API_ARGS=""
配置kube-controller-manager
[root@master ~]# grep -v '^#' /etc/kubernetes/controller-manager KUBE_CONTROLLER_MANAGER_ARGS=""
配置kube-scheduler
[root@master ~]# grep -v '^#' /etc/kubernetes/scheduler KUBE_SCHEDULER_ARGS="--address=0.0.0.0"
启动服务
for i in flanneld kube-apiserver kube-controller-manager kube-scheduler;do systemctl restart $i; systemctl enable $i;done
3.node节点部署
服务安装
yum install -y kubernetes-node ntp flannel docker
master节点配置etcd
#此处和上面KUBE_SERVICE_ADDRESSES字段配置相对应 [root@master ~]# etcdctl set /atomic.io/network/config '{"Network": "10.254.0.0/16"}' {"Network": "10.254.0.0/16"}
配置flannel
[root@node1 ~]# grep -v '^#' /etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS="http://192.168.0.163:2379" FLANNEL_ETCD_PREFIX="/atomic.io/network" FLANNEL_OPTIONS=""
验证
[root@master ~]# etcdctl get /atomic.io/network/config { "Network": "10.254.0.0/16" } [root@master ~]# etcdctl ls /atomic.io/network/subnets /atomic.io/network/subnets/10.254.3.0-24 /atomic.io/network/subnets/10.254.65.0-24 [root@master ~]# etcdctl get /atomic.io/network/subnets/10.254.3.0-24 {"PublicIP":"192.168.0.164"} [root@master ~]# etcdctl get /atomic.io/network/subnets/10.254.65.0-24 {"PublicIP":"192.168.0.165"}
配置 kube-proxy
[root@node1 ~]# grep -v '^#' /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://192.168.0.163:8080" [root@node1 ~]# grep -v '^#' /etc/kubernetes/proxy KUBE_PROXY_ARGS=""
配置kubelet
[root@node1 ~]# grep -v '^#' /etc/kubernetes/kubelet #此处配置根据实际更改 KUBELET_ADDRESS="--address=192.168.0.164" KUBELET_HOSTNAME="--hostname-override=192.168.0.164" KUBELET_API_SERVER="--api-servers=http://192.168.0.163:8080" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_ARGS=""
启动服务
for i in flanneld kube-proxy kubelet docker;do systemctl restart $i;systemctl enable $i;systemctl status $i ;done
查看节点
[root@master ~]# kubectl get nodes NAME STATUS AGE 192.168.0.165 Ready 1h 192.168.0.166 Ready 1h
4.建立pod
[root@master ~]# kubectl run nginx --image=nginx --port=80 --replicas=2
查看结果
[root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-5489345310-t6l9f 1/1 Running 0 5m nginx-5489345310-h4mrv 1/1 Running 0 5m [root@master ~]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx 2 2 2 2 10m
建立service(端口映射)
[root@master ~]# kubectl expose deployment nginx --port=80 --type=LoadBalancer service "nginx" exposed
查看命令
kubectl get service
访问
http://192.168.0.164:33867
删除deployment与service
[root@master ~]# kubectl delete deployment nginx deployment "nginx" deleted [root@master ~]# kubectl delete service nginx service "nginx" deleted
5.遇到的问题
在建立pod的时候也许会出现/etc/rhsm/ca/redhat-uep.pem找不到的问题 解决方法如下: [root@node1 ~]#rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem #重新建立pod即可
6.开启kubernetes-dashboard
下载kubernetes-dashboard配置文件
创建pod
[root@master ~]# kubectl create -f kubernetes-dashboard.yaml #删除pod命令 [root@master ~]# kubectl delete -f kubernetes-dashboard.yaml
访问
http://192.168.0.163:8080/ #会自动跳转到此处 http://192.168.0.165:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard/#/workload
相关推荐
- js中arguments详解
-
一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...
- firewall-cmd 常用命令
-
目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...
- epel-release 是什么
-
EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...
- FullGC详解 什么是 JVM 的 GC
-
前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...
-
2024-10-26 08:50 citgpt
- 跨域(CrossOrigin)
-
1.介绍 1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。 通俗讲...
- 微服务架构和分布式架构的区别
-
1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...
- 深入理解与应用CSS clip-path 属性
-
clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...
-
2024-10-25 11:51 citgpt
- Request.ServerVariables 大全
-
Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...
- python操作Kafka
-
目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...
- Runtime.getRuntime().exec详解
-
Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...
- promise.all详解 promise.all是干什么的
-
promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...
-
2024-10-24 16:21 citgpt
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracleclient (56)
- springbatch (59)
- oracle恢复数据 (56)
- 简单工厂模式 (68)
- 函数指针 (72)
- fill_parent (135)
- java配置环境变量 (140)
- linux文件系统 (56)
- 计算机操作系统教程 (60)
- 静态ip (63)
- notifyicon (55)
- 线程同步 (58)
- xcode 4 5 (60)
- 调试器 (60)
- c0000005 (63)
- html代码大全 (61)
- header utf 8 (61)
- 多线程多进程 (65)
- require_once (60)
- 百度网盘下载速度慢破解方法 (72)
- 谷歌浏览器免费入口 (72)
- npm list (64)
- 网站打开速度检测 (59)
- 网站建设流程图 (58)
- this关键字 (67)