下载kubectl
kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。
到这里去下:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md
移动文件
1、把解压出来的kubectl移动到 /usr/local/bin 里面
或者任意 在“环境变量”中且你喜欢的目录
2、chmod +x kubectl (你懂的)
3、执行 kubectl version , 看到版本 就OK了
新建一个目录
1、目录:/home/app/kubectl
2、配置文件 名叫做config
3、然后编辑 ~/.bash_profile 把上述文件加入到环境变量中
KUBECONFIG=/home/app/kubectl/config
然后执行 source ~/.bash_profile
配置
首先 去rancher自带 kubectl 去执行
kubectl config view 看下配置
测试下
kubectl cluster-info
k8s架构图

node
运行的主机。譬如物理机、云主机、甚至是我们的虚拟机
kubelet
负责master和节点(node)之间的通信、交互和数据上报 到master的apiserver
整体来讲 的职责是
1、Node管理
2、pod管理
3、容器健康检查
4、容器监控
5、资源清理
6、和容器运行时交互(docker 、rkt、Virtlet等等)
kube-proxy
外部通过NodePort、ClusterIP等方式访问服务。
kube-proxy 运行在每个Node 上,负责Pod网络代理, 维护网络规则和四层负载均衡工作
kube-controller-manager
在master中。
kube-controller-manager负责节点管理、pod复制和endpoint创建.
监控集群中各种资源的状态使之和定义的状态保持一致,.
如:
节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正
确数量的 Pod。(现在是Deployment Controller+Replication Set)
10250端口
一般情况下kubectl会暴露 10250端口 用于和apiserver 交互
常用的查询API ( 看看就好)
GET
/pods
/stats/summary
/metrics
/healthz
访问方式
docker exec -it kubelet curl -k https://localhost:10250/healthz --header "Authorization: Bearer kubeconfig-user-mtxnk.c-gfv2c:h86t2zzpjcq8lksd82l24l6ld7pkdwsh4264thvbfxldntkmdmf2c8"
获取pod
kubectl get pods -n myweb
创建deployment,service
kubectl create -f nginx.yaml -f nginxsvc.yaml
修改deployment,service
kubectl apply -f nginx.yaml -f nginxsvc.yaml
查看deployment
kubectl get deployment -n myweb
删除deployment
kubectl delete deployment myngx -n myweb
查看service
kubectl get svc -n myweb
删除service
kubectl delete svc myngx-service -n myweb
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myngx
namespace: myweb
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginxtest
image: nginx:1.18-alpine
# 只有镜像不存在时进行镜像拉取
imagePullPolicy: IfNotPresent
ports:
# Pod 端口
- containerPort: 8081
nginxsvc.yaml
kind: Service
metadata:
name: myngx-service
namespace: myweb
spec:
selector:
app: nginx #这个和前面的app也是对应
ports:
- protocol: TCP
port: 8082
targetPort: 80
type: ClusterIP
主机调度:nodeName和nodeSelector
最简单的方式
nodename

第二种方式
根据标签
kubectl get node --show-labels
添加标签:
kubectl label nodes <node-name> <label-key>=<label-value>
kubectl label nodes zhuji1 name=a1
kubectl label nodes zhuji2 name=a2
删除标签
kubectl label nodes <node-name> <label-key>-
kubectl label nodes dsjs name-
修改标签:
kubectl label nodes <node-name> <label-key>=<label-value> --overwrite
配置改一下
spec:
nodeSelector:
name: a2
数据卷:挂载本地文件
之前写了一个 go 的 web服务 (使用的是gin框架写的)
在/home/app/myweb 下有个 myserver这个可执行程序
接下来我们编写deployment文件
要点1
volumeMounts:
- name: v1
mountPath: /app
定义在容器里
要点2
volumes:
- name: v1
hostPath:
path: /home/shenyi/myweb
volumes和container同级
创建deployment
kubectl create -f mygin.yaml
mygin.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mygin
namespace: myweb
spec:
selector:
matchLabels:
app: mygin
replicas: 1
template:
metadata:
labels:
app: mygin
spec:
nodeSelector:
name: a1
containers:
- name: ginweb
image: alpine:3.12
imagePullPolicy: IfNotPresent
command: [ "/app/myserver" ]
ports:
- containerPort: 80
volumeMounts:
- name: v1
mountPath: /app
volumes:
- name: v1 #挂载宿主机上面的目录
hostPath:
path: /home/app/myweb
网友评论