k8s--介绍和安装
介绍以一个公司做形象化结构描述,如下:k8s clusterk8s集群: 由n master node + worker node组成,master掉线则由worker node从n个master中重新选举pod运行中的应用在docker里面叫容器; 在k8s中叫pod是k8s运行中应用的最小单位,是一组容器(一组中可单个,也可以多个;如:单人宿舍和多人宿舍)namespace隔离资源不隔离网络(
介绍
以一个公司做形象化结构描述,如下:
k8s cluster
k8s集群: 由n master node + worker node组成,master掉线则由worker node从n个master中重新选举
pod
运行中的应用在docker里面叫容器; 在k8s中叫pod是k8s运行中应用的最小单位,是一组容器(一组中可单个,也可以多个;如:单人宿舍和多人宿舍)
namespace
隔离资源不隔离网络(设置网络策略也可以进行网络隔离)
kubeadmin
1.安装docker或containerd
2.安装kubeadmin要求
- 设置防火墙放行规则
- 设置不同hostname
- 内网互信 永久关闭
3.安装kubelet, kubuctl, kubeadm
install in mac os
- 检查是否支持,没什么显示就是不支持虚拟化
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)