kubernates入门

前言

kubernates:开源容器应用自动化部署技术

master:
k8s集群控制节点,对集群进行任务调度,接受集群外用户去集群操作请求
master node由 API Server,Schedule,ClusterState Store(ETCD数据库)和Controller ManagerServer所组成

nodes:
集群工作节点.运行用户业务应用容器
nodes节点也叫worker node,包含kubelet,kube proxy,和pod(Container Runtime)

kubeadm:
kubeadm是一个k8s部署工具
提供两个操作命令,可以快速部署一个kubernates集群
kubeadm init(创建一个master节点)
kubeadm join(将node节点加入到master集群中)

kubernates部署环境要求

  1. 两台以上 centos 7
  2. 内存 2G 以上,CPU 2核 以上
  3. 集群内各个机器之间能相互通信
  4. 集群内各个机器可以访问外网,需要拉取镜像
  5. 禁止swap分区

文章基于kubernates1.19.4

1.环境配置

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

关闭selinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
setenforce 0  #临时

关闭swap(k8s禁止虚拟内存以提高性能):

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时

修改hosts:

cat >> /etc/hosts << EOF
192.168.59.140 k8s-master
192.168.59.141 k8s-node1
192.168.59.142 k8s-node2
EOF

设置网桥参数:

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#生效
sysctl --system  

时间同步:

yum install ntpdate -y
ntpdate time.windows.com

修改hostname,master和node分开设置:

#master修改hostname
hostnamectl set-hostname k8s-master
#node1修改hostname
hostnamectl set-hostname k8s-node1
#node2修改hostname
hostnamectl set-hostname k8s-node2
#查看当前hostname
hostname

2.安装docker

参照之前写的Docker博客

3.kubernates环境搭建

master节点操作(示例):

#添加k8s的阿里云yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装 kubeadm,kubelet 和 kubectl 
yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y
#设置开机启动
systemctl enable kubelet.service
#查看版本
kubelet --version
#执行初始化命令(在master节点上执行,ip和version为当前的)
kubeadm init --apiserver-advertise-address=192.168.59.140 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

在这里插入图片描述

#执行提示命令进行配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

接下来把node节点加入Kubernetes master中(在Node机器上执行):

#接下来把node节点加入Kubernetes master中(在Node机器上执行)
kubeadm join 192.168.59.139:6443 --token glic6i.vyu76ox0yndqfjvw \
    --discovery-token-ca-cert-hash sha256:789ce71057e03ffa7499b5f91b8d7b88e2d4ba45a8975ab2baf9ee5ce9a2e198 
#返回master查看节点
kubectl get nodes
  1. Kubelet:运行在cluster所有节点上,负责启动POD和容器
  2. Kubeadm:用于初始化cluster的一个工具
  3. Kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用

4.部署网络插件

在master机器上运行:

#下载kube-flannel.yml文件(下不了去B站动力节点第一条评论拿资料)
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#应用kube-flannel.yml文件
kubectl apply -f kube-flannel.yml
#查看运行时容器pod
kubectl get pods -n kube-system
#查看节点状态
kubectl get nodes

等待节点就绪:
在这里插入图片描述
k8s环境搭建完毕

5.Kubernetes部署“容器化应用”

代码如下(示例):

#创建(创建容器并启动)
kubectl create deployment nginx --image=nginx
#通过命令查看pod内的容器
kubectl get pods
#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
#查看service
kubectl get service

在这里插入图片描述

容器是通过scheduler分发给node运行的
层级关系: master --> node --> service --> deployment --> pods --> images

6.小试牛刀

代码如下(示例):

创建一个web项目,随便写个controller
在这里插入图片描述
编写Dockerfile
在这里插入图片描述
在node节点build镜像(因为镜像实际上是在node节点运行的,下面要指定拉取本地镜像,如果node没有,容器无法启动)
在这里插入图片描述

#--dry-run代表-->空运行测试
#-o yaml代表-->输出一个yaml资源清单
# > deploy.yaml-->代表生成deploy.yaml文件并写入
kubectl create deployment k8s-test --image=k8s-test --dry-run -o yaml > deploy.yaml
#修改deploy.yaml(imagePullPolicy: Never:从本地镜像拉取)
containers:
- image: k8s-test
  name: k8s-test
  imagePullPolicy: Never
#暴露端口并启动服务
kubectl expose deployment NAME --port=8090 --type=NodePort

在这里插入图片描述

启动服务前,先要确认容器的状态
可以通过命令: kubectl describe pods k8s-test-74f45f97fb-sw6k4 查看容器详细内容

7.部署Kubernetes Dashbaord

以下都是在master操作(示例):

#下载资源清单(下载不了去B站动力节点评论拿资料)
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

修改文件
在这里插入图片描述

#使用资源清单构建dashboard
kubectl apply -f kubernetes-dashboard.yaml
#查看容器状态(等待容器下载完成)
kubectl get pods -n kubernetes-dashboard

在这里插入图片描述
可以看到需要一个token
在这里插入图片描述

#创建账号
kubectl create serviceaccount dashboard-admin -n kube-system
#赋予权限
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
#生成token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

得到token(如果提示无效,再次执行最后一条命令,重新获取token)
在这里插入图片描述

8.引入Ingress(暴露应用)

代码如下(示例):
在这里插入图片描述

nodePort
外部机器(在windows浏览器)可以访问的端口;
targetPort
容器的端口,与制作容器时暴露的端口一致(Dockerfile中EXPOSE)
port
Kubernetes集群中的各个服务之间访问的端口

NodePort:

NodePort服务是让外部请求直接访问服务的最原始方式,NodePort是在所有的节点(虚拟机)上开放指定的端口,所有发送到这个端口的请求都会直接转发到服务中的pod里
在这里插入图片描述
这种方式有一个“nodePort"的端口,能在节点上指定开放哪个端口,如果没有指定端口,它会选择一个随机端口,大多数时候应该让Kubernetes随机选择端口;

这种方式的不足:

  1. 一个端口只能供一个服务使用;
  2. 只能使用30000–32767之间的端口;
  3. 如果节点/虚拟机的IP地址发生变化,需要人工进行处理;
  4. 因此,在生产环境不推荐使用这种方式来直接发布服务,如果不要求运行的服务实时可用,或者用于演示或者临时运行一个应用可以用这种方式;

Ingress(重点):

Ingresss是k8s集群中的一个API资源对象,相当于一个集群网关,我们可以自定义路由规则来转发、管理、暴露服务(一组pod),比较灵活,生产环境建议使用这种方式;

Ingress不是kubernetes内置的(安装好k8s之后,并没有安装ingress),ingress需要单独安装,而且有多种类型Google Cloud Load Balancer,Nginx,Contour,Istio等等,我们这里选择官方维护的Ingress Nginx;

9.部署Ingress Nginx:

下载Ingress Nginx:

1、部署一个容器化应用(pod),比如Nginx、SpringBoot程序;
kubectl create deployment nginx --image=nginx
2、暴露该服务;
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort

#下载文件(下不了,可以去github上拿或者B站动力节点)
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml

修改成阿里云镜像
在这里插入图片描述

image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

#使用资源清单
kubectl apply -f ingress-deploy.yaml

确认状态READY
在这里插入图片描述

创建Ingress规则:

编写文件: ingress-nginx-rule.yaml
在这里插入图片描述

#构架ingress规则
kubectl apply -f ingress-nginx-rule.yaml
#查看ingress规则
kubectl get ing

在这里插入图片描述

修改Windows-hosts文件
在这里插入图片描述
访问www.abc.com
直接通过IP访问是不行的,只有通过域名访问才会映射,这里直接通过IP访问是Nginx的404,欢迎页不见了
在这里插入图片描述

kubectl logs -f PODSNAME 查看日志

10.基于K8S构建Jenkins持续集成平台

安装和配置NFS(示例):

NFS简介
NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以
共享彼此的文件。我们可以利用NFS共享Jenkins运行的配置文件、Maven的仓库依赖文件等

#安装nfs
yum install -y nfs-utils
#开启启动
systemctl enable nfs
#启动服务
systemctl start nfs
#创建共享目录
mkdir -p /opt/nfs/jenkins
#创建配置文件
vi /etc/exports
#新增内容
/opt/nfs/jenkins *(rw,no_root_squash)
#重启服务使配置生效
systemctl restart nfs

在这里插入图片描述
在node节点操作(示例):

#安装nfs
yum install -y nfs-utils
#查看共享目录
showmount -e 192.168.59.140

在master节点操作(示例):
在这里插入图片描述

资源清单是在B站黑马Jenkins视频评论区捞出来的

在这里插入图片描述

#创建命名空间
kubectl create namespace kube-ops
#查看命名空间
kubectl get namespace

在这里插入图片描述
在这里插入图片描述
浏览器访问,可以看到已经成功了
在这里插入图片描述
在这里插入图片描述

#进入查件下载地址配置目录
cd /opt/nfs/jenkins/kube-ops-jenkins-home-jenkins-0-pvc-703c7f8d-8c8c-40b9-a3df-a99b480bece0/updates
#修改查件下载源
sed -i 's#http:\/\/updates.jekins-ci.org\/download#https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins#g' default.json && sed -i '#/http:\/\/www.google.com#https:\/\/www.baidu.com#g' default.json
#会到页面切换到Advanced选项修改Update Site
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#通过浏览器地址栏重启Jenkins
http://192.168.59.141:32355/restart

环境配置结束


总结

文章主要内容来自 B站动力节点k8s视频 and B站黑马Jenkins视频
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值