文章目錄
- 一、k8s是什么?
- 二、Cgroup的作用?
- 1.swap磁區的作用?
- 2.kubeadm,kubelet和kubectl
- 三.如何知道我們的docker軟體安裝了沒有?
- 四.k8s的容器編排功能,它的實作背后有哪些東西?
- 五.Deployment 控制器
- 六.k8s術語和命令
- 七.為什么master上沒有啟動pod?
提示:以下是本篇文章正文內容,下面案例可供參考
一、k8s是什么?
生產級別的容器編排系統,自動化的容器部署、擴展和管理
Kubernetes 是用于自動部署,擴展和管理容器化應用程式的開源系統,
云原生: 與k8s相關的技術 ,prometheus 可以用來監控容器
Prometheus于 2016 年加入 云原生計算基金會,作為繼Kubernetes之后的第二個托管專案,
Minikube 是一種輕量級的 Kubernetes 實作,可在本地計算機上創建 VM 并部署僅包含一個節點的簡單集群,
k8s的安裝 --》
將Google內部的容器編排工具borg,使用go語言重寫,然后開源的
[root@manager17 ~]# cat /etc/centos-release
CentOS Linux release 8.4.2105
[root@manager17 ~]#
二、Cgroup的作用?
1.swap磁區的作用?
s**wap磁區**:交換磁區,從磁盤里劃分出一塊空間來充當記憶體使用,性能比真正的物理記憶體要差,
docker 容器在記憶體里運行—》不允許容器到swap磁區里運行–》為了追求性能
[root@k8s-master ~]# cat /proc/sys/vm/swappiness
30
[root@k8s-master ~]# free -m
total used free shared buff/cache available
Mem: 3709 338 2828 8 542 3145
Swap: 4031 0 4031
[root@k8s-master ~]#
[root@worker-2 ~]# cat /proc/swaps
Filename Type Size Used Priority
[root@worker-2 ~]# swapon -a
[root@worker-2 ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 4128764 0 -2
[root@worker-2 ~]# swapoff -a
[root@worker-2 ~]# cat /proc/swaps
Filename Type Size Used Priority
[root@worker-2 ~]#
2.kubeadm,kubelet和kubectl
kubeadm --》k8s的管理程式–》在master上運行的–》建立整個k8s集群
kubelet --》在node節點上用來管理容器的–》管理docker,告訴docker程式去啟動容器
master和node通信用的–》管理docker,告訴docker程式去啟動容器
一個在集群中每個節點(node)上運行的代理, 它保證容器(containers)都 運行在 Pod 中,
kubectl --》在master上用來給node節點發號施令的程式,用來控制node節點的,告訴它們做什么事情的,是命令列操作的工具
三.如何知道我們的docker軟體安裝了沒有?
1.啟動服務
2.查看軟體串列
rpm -qa|grep docker
3.查看行程
[root@k8s-master ~]# service docker restart
Redirecting to /bin/systemctl restart docker.service
[root@k8s-master ~]# rpm -qa|grep docker
docker-scan-plugin-0.8.0-3.el8.x86_64
docker-ce-rootless-extras-20.10.8-3.el8.x86_64
docker-ce-cli-20.10.8-3.el8.x86_64
docker-ce-20.10.8-3.el8.x86_64
[root@k8s-master ~]#
四.k8s的容器編排功能,它的實作背后有哪些東西?
docker ps
ps aux|grep kube
docker images
kube-apiserver 外交部長 :對外的一個介面服務
kube-scheduler 調度器 : 負責容器被分配到那個node節點上啟動
kube-proxy 負責暴露服務后的負載均衡 ,將流量匯入到各個容器
kube-controller-manager 控制管理程式: 副本數量20個pod等
etcd 資料庫:存盤資料的地方
coredns 內部dns服務器 ,內部域名查詢使用的
flannel 集群里的節點服務器之間通信使用的
pause pod里都會啟動一個pause容器,讓整個pod共享一個命名空間(網路,mount,行程等),整個pod里的容器可以互相訪問
node節點上的kube相關的行程
kubelet :在node節點上幫著master管理容器的,是agent代理,
kube-proxy: 暴露服務(發布服務–》dna
查看行程
[root@node3 ~]# ps aux|grep kube
root 223212 3.7 4.1 1826444 156064 ? Ssl 04:22 12:48 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.5
root 346348 0.6 1.0 747708 40540 ? Ssl 10:02 0:00 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=node3
root 346643 0.7 1.0 1265668 38092 ? Ssl 10:02 0:00 /opt/bin/flanneld --ip-masq --kube-subnet-mgr
root 346845 0.0 0.0 12
五.Deployment 控制器
pod 是k8s里容器調度的最小的單元,一個pod里可以有多個容器,這些容器可以是一樣的鏡像,也是可以使用不一樣的鏡像,可以全部是nginx,也可以有nginx,MySQL,redis等容器組合成一個pod,pod里的容器的數量,可以是1,也可以是多個,
pod里的容器共享一個ip地址(網路命名空間),共享mount空間等命名空間
root@master bin]# kubectl delete pod sc-nginx 洗掉pod sc-nginx
pod "sc-nginx" deleted
[root@master bin]#
[root@master bin]# kubectl get namespace 查看有哪些命名空間
NAME STATUS AGE
default Active 23h
kube-node-lease Active 23h
kube-public Active 23h
kube-system Active 23h
[root@master bin]#
[root@master bin]# kubectl get pod -A 查看所有命名空間里的pod
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7f6cbbb7b8-6fwrz 1/1 Running 10 (74m ago) 21h
kube-system coredns-7f6cbbb7b8-hmbtm 1/1 Running 10 (74m ago) 21h
kube-system etcd-master 1/1 Running 7 (87m ago) 23h
kube-system kube-apiserver-master 1/1 Running 7 (87m ago) 23h
kube-system kube-controller-manager-master 1/1 Running 10 (87m ago) 23h
kube-system kube-flannel-ds-55q8d 1/1 Running 2 (73m ago) 21h
kube-system kube-flannel-ds-nlj5v 1/1 Running 1 (74m ago) 22h
kube-system kube-flannel-ds-vs84g 1/1 Running 3 (87m ago) 22h
kube-system kube-flannel-ds-wtxc9 1/1 Running 1 (73m ago) 22h
kube-system kube-proxy-2jg9r 1/1 Running 2 (73m ago) 23h
kube-system kube-proxy-jtc74 1/1 Running 1 (74m ago) 23h
kube-system kube-proxy-s4gvn 1/1 Running 2 (73m ago) 21h
kube-system kube-proxy-v58gz 1/1 Running 8 (87m ago) 23h
kube-system kube-scheduler-master 1/1 Running 8 (87m ago) 23h
[root@master bin]#
[root@master bin]# kubectl --help
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
六.k8s術語和命令
Basic Commands (Beginner):
create Create a resource from a file or from stdin
expose Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
run 在集群中運行一個指定的鏡像
set 為 objects 設定一個指定的特征
Basic Commands (Intermediate):
explain Get documentation for a resource
get 顯示一個或更多 resources
edit 在服務器上編輯一個資源
delete Delete resources by file names, stdin, resources and names, or by resources and label selector
Deploy Commands:
rollout Manage the rollout of a resource
scale Set a new size for a deployment, replica set, or replication controller
autoscale Auto-scale a deployment, replica set, stateful set, or replication controller
Cluster Management Commands:
certificate 修改 certificate 資源.
cluster-info Display cluster information
top Display resource (CPU/memory) usage
cordon 標記 node 為 unschedulable
uncordon 標記 node 為 schedulable
drain Drain node in preparation for maintenance
taint 更新一個或者多個 node 上的 taints
Troubleshooting and Debugging Commands:
describe 顯示一個指定 resource 或者 group 的 resources 詳情
logs 輸出容器在 pod 中的日志
attach Attach 到一個運行中的 container
exec 在一個 container 中執行一個命令
port-forward Forward one or more local ports to a pod
proxy 運行一個 proxy 到 Kubernetes API server
cp Copy files and directories to and from containers
auth Inspect authorization
debug Create debugging sessions for troubleshooting workloads and nodes
Advanced Commands:
diff Diff the live version against a would-be applied version
apply Apply a configuration to a resource by file name or stdin
patch Update fields of a resource
replace Replace a resource by file name or stdin
wait Experimental: Wait for a specific condition on one or many resources
kustomize Build a kustomization target from a directory or URL.
Settings Commands:
label 更新在這個資源上的 labels
annotate 更新一個資源的注解
completion Output shell completion code for the specified shell (bash or zsh)
Other Commands:
api-resources Print the supported API resources on the server
api-versions Print the supported API versions on the server, in the form of "group/version"
config 修改 kubeconfig 檔案
plugin Provides utilities for interacting with plugins
version 輸出 client 和 server 的版本資訊
Usage:
kubectl [flags] [options]
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
[root@master bin]#
啟動nginx的pod,里面的副本數量5個
–replicas 5 副本
kubectl create deployment d-sc-nginx --image nginx:laste -r 5
[root@master bin]# kubectl create deployment d-sc-nginx --image nginx:latest
deployment.apps/d-sc-nginx created
[root@master bin]# kubectl get pod
NAME READY STATUS RESTARTS AGE
d-sc-nginx-676fb46b7-p4449 0/1 ImagePullBackOff 0 15s
[root@master bin]# kubectl log
logger login loginctl logname
[root@master bin]# kubectl log
logger login loginctl logname
[root@master bin]# kubectl logs
[root@master bin]# kubectl logs d-sc-nginx-676fb46b7-p4449 --》查看pod日志,用來排錯
Error from server (BadRequest): container "nginx" in pod "d-sc-nginx-676fb46b7-p4449" is waiting to start: trying and failing to pull image
[root@master bin]#
[root@master bin]# kubectl get deployment 查看deployment
NAME READY UP-TO-DATE AVAILABLE AGE
d-sc-nginx 0/1 1 0 3m44s
[root@master bin]# kubectl delete deployment d-sc-nginx 洗掉deployment
deployment.apps "d-sc-nginx" deleted
[root@master bin]#
[root@master bin]# kubectl create deployment d-sc-nginx --image nginx:latest
deployment.apps/d-sc-nginx created
[root@master bin]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
d-sc-nginx 0/1 1 0 3s
[root@master bin]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
d-sc-nginx 1/1 1 1 9s
[root@master bin]#
[root@master bin]# kubectl get pod
NAME READY STATUS RESTARTS AGE
d-sc-nginx-587c6c899-6rmwr 1/1 Running 0 38s
[root@master bin]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
d-sc-nginx-587c6c899-6rmwr 1/1 Running 0 82s 10.244.3.7 node2 <none> <none>
[root@master bin]#
[root@master bin]# kubectl scale --replicas 5 deployment d-sc-nginx
deployment.apps/d-sc-nginx scaled
[root@master bin]#
[root@master bin]# kubectl get rs
NAME DESIRED CURRENT READY AGE
d-sc-nginx-587c6c899 5 5 5 8m26s
[root@master bin]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
d-sc-nginx 5/5 5 5 8m45s
[root@master bin]# kubectl get pod
NAME READY STATUS RESTARTS AGE
d-sc-nginx-587c6c899-6j7vs 1/1 Running 0 3m31s
d-sc-nginx-587c6c899-6rmwr 1/1 Running 0 11m
d-sc-nginx-587c6c899-7bkhh 1/1 Running 0 3m31s
d-sc-nginx-587c6c899-7fllb 1/1 Running 0 3m31s
d-sc-nginx-587c6c899-fvdrr 1/1 Running 0 3m31s
[root@master bin]#
[root@master bin]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
d-sc-nginx-587c6c899-6j7vs 1/1 Running 0 4m56s 10.244.2.6 node3 <none> <none>
d-sc-nginx-587c6c899-6rmwr 1/1 Running 0 12m 10.244.3.7 node2 <none> <none>
d-sc-nginx-587c6c899-7bkhh 1/1 Running 0 4m56s 10.244.3.8 node2 <none> <none>
d-sc-nginx-587c6c899-7fllb 1/1 Running 0 4m56s 10.244.2.7 node3 <none> <none>
d-sc-nginx-587c6c899-fvdrr 1/1 Running 0 4m56s 10.244.3.9 node2 <none> <none>
[root@master bin]#
七.為什么master上沒有啟動pod?
答案: 這是因為scheduler 調度器會根據調度策略,避免了在master上建立pod
污點: taint
根據pod調度策略和方法:
1.deployment: 全自動調度
2.node selector:定向調度
3.nodeaffinity --》盡量把不同的pod放到一臺node上
4.podaffinity --》盡量把相同的pod放到一起
5.taints和tolerations 污點和容忍
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/298335.html
標籤:其他
上一篇:DHCP服務器
