k8s--介绍和安装

介绍

以一个公司做形象化结构描述,如下:
基本架构

k8s cluster

k8s集群: 由n master node + worker node组成,master掉线则由worker node从n个master中重新选举

pod

运行中的应用在docker里面叫容器; 在k8s中叫pod是k8s运行中应用的最小单位,是一组容器(一组中可单个,也可以多个;如:单人宿舍和多人宿舍)

namespace

隔离资源不隔离网络(设置网络策略也可以进行网络隔离)

kubeadmin

kubeadm-部署

1.安装docker或containerd
2.安装kubeadmin要求

  • 设置防火墙放行规则
  • 设置不同hostname
  • 内网互信 永久关闭

3.安装kubelet, kubuctl, kubeadm
安装命令

install in mac os

  1. 检查是否支持,没什么显示就是不支持虚拟化
sysctl -a | grep -E --color 'machdep.cpu.features|VMX'

2.安装kubectl

brew install kubectl

3.验证 kubectl 版本

kubectl version

4.安装管理程序

  • HyperKit
  • VirtualBox
  • VMware Fusion
    三选一,进行安装
brew install hyperkit

5.安装minikube

brew install minikube

6.启动

minikube start #也可以指定启动方式
minikube stop

# 开启Dashboard,通过--url参数不会打开管理页面,并可以在控制台获得访问路径
minikube dashboard --url
# 要想从外部访问Dashboard,需要从使用kubectl设置代理才行,--address设置为你的服务器地址
kubectl proxy --port=6666 --address='192.168.5.94' --accept-hosts='^.*' &
# 切换到root用户
su -
# 开启端口
firewall-cmd --zone=public --add-port=44469/tcp --permanent
# 重启防火墙
firewall-cmd --reload

Usage

常用命令

# 打开gvisor组件
minikube addons enable gvisor   
 
# 查看k8s配置
kubectl config view

# 获取kube-system命名空间信息
kubectl get pod,runtimeclass gvisor -n kube-system
#控制命令, 必须在master才能获取所有的情况
kubectl create namespace
kubectl get pod -n default
# 命令方式创建资源:创建命名空间
kubectl create ns app     
# 删除命名空间资源                
kubectl delete ns app 

# yaml方式创建资源:创建xxx应用或者是配置/策略等
kubectl apply -f xxx.yaml		  
kubectl delete -f xxx.yaml
# 修改服务资源;修改type:NodePort 把端口暴露出去
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard	
# 加入集群token获取
kubectl token ... 
# 密钥相关操作
kubectl secert ...  
# 查看服务信息
kubectl get svc -A | grep kubernetes-dashboard 


# 查看所有                    
kubectl get pods -A	
 # 查看pod信息
kubectl describe pod mynginx
# 查看booking的pod信息json格式
kubectl get pod booking -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort 
# pod日志信息
kubectl logs pod名字
# 打印更加完善的信息
kubectl get pod mynginx -owide  
# yaml方式输出
kubectl get pod mynginx -oyaml  
# 在mynginx执行命令
kubectl exec -it mynginx -- /bin/bash 
# 获取pod标签
kubectl get pod --show-labels  

namespace

两种方式

kubectl create ns mynginx    
kubectl delete ns mynginx

kubectl apply -f mynginx.yaml

mynginx.yaml信息,如下:

apiVersion: v1
kind: NameSpace
metadata:
    name: mynginx

pod

直接创建
kubectl run hello --image=nginx   
kubectl apply -f hello.yaml

hello.yaml

apiVersion: v1
kind: Pod
metadata:
    labels:
        run: hello
    name: hello
    namespace: default
spec:
    containers:
      - image: nginx
        name: hello

创建一个pod两个容器; 一个pod里面多个容器不能占用同样的端口

apiVersion: v1
kind: Pod
metadata:
    labels:
        run: hello2
    name: hello2
    namespace: default
spec:
    containers:
      - image: nginx
        name: nginx
      - image: tomcat:8.5.4
        name: tomcat
deployment创建

控制pod, 使pod拥有多副本,自愈,扩缩容等能力

 # 部署一次
kubectl create deployment mytomcat --image=tomcat:8.0.5 
# 自愈(使用deployment部署的pod就算删了pod,还会进行重新启动这就是自愈能力)
kubectl delete pod名称 -n default 
 # 获取名字
kubectl get deploy -A   
 # 删除部署, 只有这样删除才算删除
kubectl delete deploy 名字 
# 查看部署
kubectl get deploy coredns -n kube-system -o yaml 
# 部署三次(三个)
kubectl create deployment my-dep --image=nginx --replicas=3         

yaml部署: 多副本

apiVersion: apps/v1
kind: Deployment
metadata:
    labels:
        run: my-dep
    name: my-dep
    namespace: default
spec:
    replicas: 3
    selector:
        matchLabels:
            app: my-dep
    template:
        metadata:
            labels:
                run: my-dep
    spec:
        containers:
          - image: nginx
            name: nginx
          - image: tomcat:8.5.4
            name: tomcat

service

功能: pod服务发现和负载均衡; 将一组pods公开为网络服务的抽象方法。(感觉一般用在集群内统一应用访问负载)

# 80为pod副本端口,8000为统一访问端口(只能在集群内访问:可以用过ip:8000, service域名:8000),实现多个副本负载均衡
kubectl expose deploy my-dep --port=8000 --target-port=80  
kubectl get service
kubectl describe deploy my-dep -n default
kubectl delete service my-dep


# 暴露在集群内部, 和第一条命令一样
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=ClusterIp

# 暴露在集群外部, 通过节点+端口进行访问
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort   

# 如果你使用的是minikube, 你通过以下命令来获取访问入口,NodePort一般是配合externalIPs一起使用
minikube service my-dep --url

# 如果你想本地使用(通过localhost来访问),你可以使用端口转发。下面的命令就建立了一个端口转发
kubectl port-forward mynginx-6b78685d4d-q6dmj 8000:80
或者
kubectl port-forward deployment/mynginx 8000:80
或者
kubectl port-forward replicaset/mynginx-6b78685d4d-q6dmj 8000:80
或者
kubectl port-forward service/mynginx 8000:80

官方可参考: https://kubernetes.io/zh/docs/tasks/access-application-cluster/ingress-minikube/

secret

kubectl create secret docker-registry xx-docker \
--docker-username=xx \
--docker-password=xx \
--docker-email=x@d.com 

kubectl create secret docker-registry regcred \
--docker-server=<你的镜像仓库地址>
--docker-username=xx \
--docker-password=xx \
--docker-email=x@d.com 

kubectl get secrets
kubectl get secrets default-token-clf5l -oyaml

特性功能

扩缩容

kubectl get deploy
kubectal get pod 

kubectl scale deploy/my-dep --replicas=5 # 扩缩容,修改数字
kubectl edit deploy my=dep # 直接修改yaml格式文件

# 设置自动扩容/缩容
kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80

故障转移: 自动会重新在其它机器拉起,保证副本数;默认是5分钟,合理设置时间,太快会导致正常容器启动会kill掉。
滚动更新: 现在集群副本中删除一个,然后部署新的镜像。

# 部署更新,主要是修改镜像文件; --record记录
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record  
kubectl rollout status deployment/my-dep

版本回退:

kubectl rollout history deployment/my-dep
kubectl rollout undo deployment/my-dep --to-revision=1
kubuctl get pod -w # 查看过程
kubectl get deployment/my-dep -oyaml|grep "image"

部署不同方式:
部署

其它

kubesphere: 图形化操作平台
存储抽象: nfs, pv/pvc, config_map
service的统一网关入口: 入口网关或出口网关,如下:
入口网关

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值