k8s安装部署

Posted 浪子尘晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s安装部署相关的知识,希望对你有一定的参考价值。

Kubernetes简介
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
快速部署应用
快速扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用

Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚机轻量、更“透明”,这更便于监控和管理。

Kubernetes 部署
在之前的实验基础上操作,停掉部署的服务

1,srver1和server2和server3 都需要配置以下操作
vim /etc/docker/daemon.json
##############################
{
  "registry-mirrors": ["https://1wz754td.mirror.aliyuncs.com"],
  "exec-opt": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
#############################################
systemctl daemon-reload
systemctl restart docker

2,swapoff -a   #三个主机都需要关闭swap分区
vim /etc/fstab

3,配置阿里云yum:
vim /etc/yum.repos.d/k8s.repo
#####################################
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
########################################

yum install -y kubelet kubeadm kubctl  #安装三个包
scp k8s.repo server2:/etc/yum.repos.d/    #server2和server3都安装
scp k8s.repo server3:/etc/yum.repos.d/
systemctl enable --now kubelet #部署节点开启服务

 

 

 

 

配置

kubeadm config images list  #查看所需要的镜像
kubeadm config print init-defaults  #查看默认的配置
官网拉取不到镜像可以从阿里云拉取
kubeadm config images list  --image-repository  registry.aliyuncs.com/google_containers    # 查看阿里云镜像仓库
kubeadm config images  pull   --image-repository  registry.aliyuncs.com/google_containers  #从阿里云拉取镜像

server2和server3同时也要从阿里云拉取镜像
ubeadm config images  pull   --image-repository  registry.aliyuncs.com/google_containers  #拉取镜像

 

 

 

server2和server3

 

 

kubeadm init --pod-network-cidr=10.244.0.0/16   --image-repository  registry.aliyuncs.com/google_containers    #需要网络插件(初始化集群)

kubeadm join 192.168.213.10:6443 --token itqiuj.byujy9s33b0e9x5y \\
--discovery-token-ca-cert-hash sha256:5c6e17048ab960064b1d6c8293e4fb021a6c4a435d7d3c620f016c41d4a780f3    #此命令初始化的时候生成,节点扩容server2和server3

 

 

 

注意kubeadm token list(只有24小时超过的话需要重新生成和添加)

 

创建一个用户来操作kube
useradd kubeadm  #创建用户
visudo

 

根据提示初始化sudo:
su - kubeadm
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl get node  #查看已经部署好的节点
 echo "source <(kubectl completion bash )" >> ~/.bashrc   #让kubectl可以补命令

 

安装网络插件
官方文档进行查看

 

链接到githab

 

 

复制文本到 kube-flannel.yml:
\\vi kube-flannel.yml  #编辑文件
server1 server2和server3 #拉取镜像  自己拉取镜像有问题微信下载老师的镜像

 

 


kubectl taint nodes --all node-role.kubernetes.io/master-   让master加入调度
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \\
   openssl dgst -sha256 -hex | sed 's/^.* //'    #查看加密,生成新的token需要

 

pod管理
Pod可以创建和管理k8s最小可部署单元,一个pod代表集群中运行一个进程,每个pod都有一个唯一的IP

Pod 是 kubernetes 系统的基础单元,是由用户创建或部署的最小组件,也是 kubernetes 系统上运行容器化应用的资源对象。Kubernetes 集群中其他资源对象都是为 pod 这个资源对象做支撑来实现 kubernetes 管理应用服务的目的。Kubernetes 集群组件主要包括主节点组件API Server、Controller Manager、Scheduler 以及子节点组件 kubelet、container Runtime(如docker)、kube-proxy 等。从与集群各组件交互角度讲述 pod 的创建、运行、销毁等生命周期,Pod 生命周期中的几种不同状态包括pending、running、succeeded、failed、Unknown。与API Server交互

1,命令行部署
 

Kubectl  run  nginx --image=nginx  --replicas=3 --record  #部署   --record回滚标签
kubectl get pod -o wide  #详细信息
kubectl describe  pod  nginx-6db489d4b7-dnbw9  #拉取镜像等信息
集群内部节点可以访问,但是外部不可以访问

 

内部容器访问

两个容器之间的访问;
kubectl expose deployment nginx --port=80 --target-port=80  #端口的映射
kubectl run test  -it --image=busybox --restart=Never # 开启容器
 wget -O - -q http://nginx  #可以访问

 

 

第一种方法: kubectl expose deployment nginx --port=80 --target-port=80  --type=Nodeport  #直接可以用命令来指定
第二种办法;编辑文件:
kubectl edit svc nginx  #编辑文件 将type=Nodeport
kubectl describe svc nginx   #查看

 

 

宿主机访问:

 

Pod 的扩容和缩减

 kubectl scale deployment nginx --replicas=6  #拉伸
 kubectl scale deployment nginx --replicas=3  #缩减

 

滚动更新以及回滚

滚动更新:
kubectl set image deployment/nginx  nginx=nginx:1.16.0  #只需换镜像即可
回滚:
kubectl rollout history deployment nginx  #查看设置的回滚记录
kubectl rollout undo deployment nginx --to-revision=1  #回滚

 

 

 

以上是关于k8s安装部署的主要内容,如果未能解决你的问题,请参考以下文章

k8s安装部署

kubernetes系列03—kubeadm安装部署K8S集群

k8s监控组件heapster安装部署

记一次失败的K8S安装部署

k8s集群安装部署实战详细手册

k8s集群安装部署实战详细手册