Kubernetes学习前部署

个人主页

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

 

Kubernetes这个单词来自于希腊语,含义是 舵手 或 领航员;

生产环境级别的容器编排

编排是什么意思

    1. 按照一定的目的依次排列;

    2. 调配、安排;

Kubernetes,也称为K8S,其中8是代表中间“ubernete”的8个字符,是Google在2014年开源的一个容器编排引擎,用于自动化容器化应用程序的部署、规划、扩展和管理,它将组成应用程序的容器分组为逻辑单元,以便于管理和发现,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,很多细节都不需要运维人员去进行复杂的手工配置和处理;

Kubernetes拥有Google在生产环境上borg 15年运行的经验,并结合了社区中最佳实践;

K8S是 CNCF 的项目,本来Kubernetes是Google的内部项目,后来开源出来,又后来为了其茁壮成长,捐给了CNCF;

CNCF全称Cloud Native Computing Foundation(云原生计算基金会)

官网:https://kubernetes.io/

中文社区:https://www.kubernetes.org.cn/k8s

代码:https://github.com/kubernetes/kubernetes

Kubernetes是采用Go语言开发的,Go语言是谷歌2009发布的一款开源编程语言;

Kubernetes整体架构

master--nodes
  

Master:

k8s集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;

Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成;


Nodes:

集群工作节点,运行用户业务应用容器;

Nodes节点也叫Worker Node,包含kubelet、kube proxy 和 Pod(Container Runtime);


============================

部署 Kubernetes 环境(集群)

主要有多种方式:

(1)minikube

minikube可以在本地运行Kubernetes的工具,minikube可以在个人计算机(包括Windows,macOS和Linux PC)上运行一个单节点Kubernetes集群,以便您可以试用Kubernetes或进行日常开发工作;

https://kubernetes.io/docs/tutorials/hello-minikube/

(2)kind

Kind和minikube类似的工具,让你在本地计算机上运行Kubernetes,此工具需要安装并配置Docker;

https://kind.sigs.k8s.io/

(3)kubeadm

Kubeadm是一个K8s部署工具,提供kubeadm init 和 kubeadm join两个操作命令,可以快速部署一个Kubernetes集群;

官方地址:

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

(4)二进制包

从Github下载发行版的二进制包,手动部署安装每个组件,组成Kubernetes集群,步骤比较繁琐,但是能让你对各个组件有更清晰的认识;

(5)yum安装

通过yum安装Kubernetes的每个组件,组成Kubernetes集群,不过yum源里面的k8s版本已经比较老了,所以这种方式用得也比较少了;

(6)第三方工具

有一些大神封装了一些工具,利用这些工具进行k8s环境的安装;

(7)花钱购买

直接购买类似阿里云这样的公有云平台k8s,一键搞定;


============================

Kubeadm部署k8s集群

默认各节点都已经正确安装`docker-ce:19.03.10`,并且都已经正常配置docker加速器。

## 基本环境准备

| Linux版本 | CPU  | MEM     |
| --------- | ---- | ------- |
| CentOS7.8 | 双核 | 4G/node |

| master       | node01       | node02       |
| ------------ | ------------ | ------------ |
| 192.168.8.10 | 192.168.8.20 | 192.168.8.30 |

### 更改主机名

hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02

### 添加对应域名解析

cat >> /etc/hosts << EOF
192.168.8.10 master
192.168.8.20 node01
192.168.8.30 node02
EOF

### 防火墙,SElinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config


### 时间同步

timedatectl set-timezone Asia/Shanghai;timedatectl set-local-rtc 0


### 禁用swap

swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab      
free -h 查看禁用效果


### 配置集群无密登录 master到node01,node02无密码

ssh-keygen -t rsa
ssh-copy-id root@node01
ssh-copy-id root@node02


### 优化内核参数

modprobe br_netfilter

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 1048576
fs.file-max = 52706963
fs.nr_open = 52706963
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_max = 2310720
EOF

sysctl -p /etc/sysctl.d/kubernetes.conf

scp /etc/sysctl.d/kubernetes.conf node01:/etc/sysctl.d/
scp /etc/sysctl.d/kubernetes.conf node02:/etc/sysctl.d/
sysctl -p /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

**到此基本环境准备完毕**,需要在各节点上准备`kubernetes`的`yum`源,这里推荐使用阿里云的`yum`源先来`master`节点上操作

#Kubernetes的阿里源添加
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

或

#Kubernetes的清华源添加

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=0
EOF


部署k8s组件

#这里注意,master节点部署了kubectl、kubelet、kubeadm三个组件,当然在部署前要指定和k8s版本一致的组件版本。

yum install kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 -y --nogpgcheck
systemctl start kubelet
systemctl enable kubelet
#阿里源安装时,需要添加--nogpgcheck参数

#node节点只需部署kubelet-1.18.0 kubeadm-1.18.0即可


# 更改docker默认Cgroup驱动

在/etc/docker/daemon.json文件中,添加一句话即可,当然这个和我们的设置加速器写在一起了。

cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://1dmptu91.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker

#不要忘了重新加载以及重启doker

kubeadm初始化

至此,准备工作做完,可以开始初始化,可是由于国内网络环境限制,我们不能直接从谷歌的镜像站下载镜像,有两种方法可以解决,第一种:需要我们手动从docker镜像站下载镜像,然后重新命名,也可以用脚本来实现。这里我们采用第二种:在初始化k8s的时候,指定镜像源为阿里云。

初始化时指定镜像仓库为阿里云

kubeadm init --kubernetes-version=v1.18.0 --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address 192.168.8.10 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

或者还有其他方案将k8s集群状态配置问一个yaml文件,然后从yaml文件初始化

kubeadm config print init-defaults > kubeadm-config.yaml
vim kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.8.10
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"

#初始化集群
kubeadm init --config=kubeadm-config.yaml

#成功后提示:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

  
kubeadm join 192.168.8.10:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:a2ec410cea22ef589a7af6072008fbace244a9106bde030e771e9d933124ceec 

# PS: 结果做一个保存

systemctl restart kubelet 

kubectl get nodes
NAME     STATUS     ROLES    AGE    VERSION
master   NotReady   master   5m3s   v1.18.0


**可以看出master的状态是未就绪(NotReady**),之所以是这种状态是因为还缺少一个附件**flannel**,没有网络各Pod是无法通信的

//添加网络组件(flannel),组件flannel可以通过https://github.com/coreos/flannel中获取

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


//再次查看集群节点状态

kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   13m   v1.15.0


以上是主节点的安装部署,然后个node节点的安装,和加入集群,这里注意,验证,node节点已经准备好了相关的镜像。

kubeadm join 192.168.8.10:6443 --token njus35.kw3hxkys3urmnuob --discovery-token-ca-cert-hash sha256:05761b73b571c18eebd6972fb70323cd3c4d8e0aa7514efa2680411310424184


node节点需要几个镜像,可以手动先下载一下,或者从master节点同步

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0
docker pull quay.io/coreos/flannel:v0.15.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2


等待一会去master节点验证。等待的是同步flannel网络。

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   18m   v1.15.0
node01   Ready    <none>   68s   v1.15.0
node02   Ready    <none>   12s   v1.15.0

> PS: 确保所有pod都是running状态。


//设置kubectl命令行工具自动补全功能

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

#为了以后我们写yaml文件方便些,这里设置tab键空格个数

vim .vimrc
set tabstop=2
#########
source .vimrc

#在master验证k8s组件 如下所示代表安装组件完整且是running状态

kubectl get pod -n kube-system -o wide
NAME                             READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-qwb6g         1/1     Running   0          60m
coredns-7ff77c879f-zhsgv         1/1     Running   0          60m
etcd-master                      1/1     Running   0          60m
kube-apiserver-master            1/1     Running   0          60m
kube-controller-manager-master   1/1     Running   0          60m
kube-flannel-ds-s6cfd            1/1     Running   0          9m16s
kube-flannel-ds-v75p7            1/1     Running   0          32m
kube-flannel-ds-xhn7c            1/1     Running   0          11m
kube-proxy-6ptb9                 1/1     Running   0          60m
kube-proxy-82lc6                 1/1     Running   0          9m16s
kube-proxy-h5g68                 1/1     Running   0          11m
kube-scheduler-master            1/1     Running   0          60m


#记得三台节点最后要执行systemctl enable kubelet 忘记的集群就启动不了

==============================

Kubernetes部署“容器化应用”

在Kubernetes集群中部署一个Nginx :

kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get pod,svc

访问地址:http://NodeIP:Port

在Kubernetes集群中部署一个Tomcat :

kubectl create deployment tomcat --image=tomcat 

kubectl expose deployment tomcat --port=8080 --type=NodePort

访问地址:http://NodeIP:Port

K8s部署微服务(springboot程序):

1、项目打包(jar、war)-->可以采用一些工具git、maven、jenkins

2、制作Dockerfile文件,生成镜像;

3、kubectl create deployment nginx --image= 你的镜像

4、你的springboot就部署好了,是以docker容器的方式运行在pod里面的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值