k8s集群搭建-新-以及k8s相关命令详情

修改主机名
hostnamectl set-hostname master00

hostnamectl set-hostname node1

hostnamectl set-hostnq U Q :ame node2 所有集群主机都改好o g = 1 3主机名自定义

修改/etc/hos[ m : F L Yts文E r B件,所有主机都修改
192.168.5.1r 6 J ) `00 master00
192.168.5.101 nodq V be01
192.168.5.102s j X 6 k U $ y ^ node02

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
cat <<EO! . $F >  /e% m * N qtc/5 z ? 5 o { 4 Hsysctl.d/ke ^ D P B x d8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bri_ s .dge.bridge-nf-call-iptables = 1
EOF
sysctl -p /et[ 4 p u d M qc/sysctl.conf
systV { ^ J + ] 7 oemctl stop firewalld
systemctl disable firewalld
setenforce  0
sed -i "s/^SELINUX=enforcing/z T N 9 : /SELINUX=disat % 9 Ebled/g" /etc/sysconfig/selinux
sed -i "s/^SELINUX=enforcing/SELINUX$ 7 ` z e t _ u=disabled/g" /etc/selin$ A  ux/config
ca! X ^ -t <<EOF >  /etcW b - ~ q/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirror(  Q Hs.alz Y ) Siyun.com/kubernI : 3 N _etes/yum/d ) t %repos/kubernetes-e4 u l i h X _ ^l7-x86_64/
gpgcheck=0
enable=1
EOF
yum insg q ] k p T } v atall -y yum~ , - 9 T-utils deva M 5 @ice-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.doV E v 3 Z e Z E +cker.com/linux/centos/docker-ce.repo
yum install doct l [ker-ce -y
systemctl enable docker
sn h % ~ystemctl start docker
yum -y install kubelet kubeadm  kubectl kubernetes-cni
systemctl enable kubelet.service
systemctl start kubelet
kubeadm config print init-defaults > kubeadm.conf
** #注:sed这一步操作可自行进入 kubeadm.confQ _ q e + 8  4 C中修改自定义版本,我的是v1.18.2*p t M & 5 S R t 9*
sed -iP N E 7 = - % s/$ X ! } + Dv1 f / W o ( 6.14.0/v1.14.3/  kubeadm.conf
kubeadm config images pull --config kubeadm.conf
kubeadm init --kubernetes-version=v1.18.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertu r & g - [ g dise-address=192.168.111.O & T b m J * 1 u128
mkdir -p $HOME/.ky P u f Yube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/confiE 3 ]g
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -t 9 i g ` L I d ]f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
完了之后记住下面两行内容,因为node加入集群需要用到
kubeas W m R d 9 Qdm 0 5 E join 192.168.5.100:6443 --toY E = p p B | S yken j2to W ) Angs.y5fzfd9ph5ppdien 
--discovery-token-ca-ce& x Art-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb481M  L f
查看集群状态
kubectl get cs
NZ ] L z #AME                 STATUS         MESSAGE             ERROR
controller-manager   Healthy      ok
schedulerW : x M                  Healthy      ok
etcd-0                       Healthy      {"health":"true"}   成功
kubectl get pods --all-namV S T t { _espaces
NAMESPACr F [ W ^ 2 * ! xE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-P  tfb8b8dccf-khsgh            1/1     Running   0          2m2s
kube-system   coredns-fb8b8dccf-rrxgb             1g F | c ;/1     Running   0          2m2s
kube-sy* J Lstem   etcd-master00                             1/1     Runningo s e   0          78s
kube-system   kube-apiservJ b u } - eer-master00            1/1     Rus Z k J M O G L (nning   0          73s
kube-system   kube-controller-manager-ma% - f h nster 00   1/1     Running   0          79s
kube-system   kube-flannel-ds-amd64-xpr74     1/1     Running   0          2m2s
kube-system   kube-proxyK u Q-dhvcr                         1/1     RunninU * P  2 Zg   0          2m2` * c K 2 g $ Es
kube-system   kube-scheduler-master00            1n 0 R/1     Running   0          57s

如果STATUS不是Running 请等几分钟再查% 7 [ [ u看,还是没有,查看报错日志 cay 9 Ft /var/log/messages,然后找失败原因

master部署完了,下面是node部署

swapoff -a
sed -i 's/.*swap.*/#&/^ V Z R' /etc/fstab
cat &( W ) l 1lt;<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nfW 4 L w s o R o-call-iptables = 1
EOF
sysctl -p /etc/sysctl.conf
systemctl stopt b } ^ 4 L 4 firewalld
systemctl disable firewalld
setenforce  0
sed -i "s/^SELINUX=enfq E g ) 3 l z !orcing/SELINUX=disabled/g" /etc/sysconfig/{ % l M @ = H D bselinuxo K H C r x Q 7 R
sed -i "s/^SELINUX=et S A v n H ~nforcing/SELINUX=disabled/g" /etc/selinux/config
cat <&lu B gt;EOF >  /etc/yum.repos.d/kubN l Lernetes.repo
[kubernetes]
name=kubernetes
baseurl=http& ] 1s[ + z  L  4://I 8 i W z 7 & % vmirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
e+ { C i U H y Mnable=1
EOF
yum install -y yum-utils device-mapper-persisR l p  W D 3 gtent-data lv1 l P j e l `m2( |  h | & 6
yum-cx A : ] # } v gonfig-managerv q 2 x I T r u --add-repo https://download.docker.com/linux( l , : b/centos/docker-ce.repo
yum install docker-ce -y
systemctl enablez G n E * D ; docker
systemctl start docker
yum -y install kubo p v Velet kubeadm  kubectl kf : M u 6 2 Pubernetes-cni
systemctl enable kubelet.service
systemctl start kubelet
kubeadm c+ L  p :onfig print init-defaults > kubeadm.conf
#注:sed这一步操作可自行进入 kubeadm.conf中修改自定义版本,我的是v1.18.2
sed -i s/v1.14.0/v1.14.3/  kubeadm.conf
kubeadm config images pull --config kubeadm.conf
然后加入2 7 j i | ^ R ) .集群:通过刚刚master的8 ] B H + Z记录加入
kubeadm join 192.168.5.100:64b # N Y 743 --token j2tngs.y5fzfd9ph5ppdien 
--discovery-token-ca-cert-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb3 _ 6 m481
This node has joined the c) l ( H c ; eluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kc b h h ]ubelet was informed of the new secure connection d% 9 2 0 ) betails.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster  成功加入集群

然后所有的node依次加入集群

查看集群状态
kubectl get cs

查看集群节点
kubectl get nodes


k8s一些相关命令:
#查看所? I ; t W Z $ O p有namespace的pods运行情况
#kubectl get pods --all-namespaces
#查看具体pods,记得后边跟namespace名字哦
kubectl get pods kubernetes] F ) : z 9-dashboard-76479d66bb-nj8wr --namesp. 7 * 1 Vace=kube-system
查看pods具体信息
kubectl get pods -o wid5 + V : a : se kubernetes-dashbov ( l o [ard-76479d66bb-nj8wr --namespace=kube-system
查看集群健康状态
kubectl get cs
获取所有deployment
kubectl gc d @ u r d i Ret deployment --all-namespace4 l ~ o K W E ~s
列出该 namespace 中的所有 pod 包括未l q y m x ] } m初始化的
kubectl get pods5 [ E o r Y A --include-uninitialized
查看deployment()
kubectl get deployment nginx-app
查看rc和servers
kubectl get rc,services
查看pods结构信息(重点,通过这个看日志分析错误)
对控U z ] {制器和服务,node同样有效
kubectl describe pods xxxxpodsname --namespace=xxxnamespace
其他控制器类似吧,就是kubectl get 控制控制器具体名称
查看pod日志
kubectl l^ v y ` = 9 + ]ogs $POD_NAME
查看pod变量
kubectl exec my-nginx-5j8ok -- pri x Y 8 L ~intE 7 l ; C Z - V (env | grep SERVICE
集群
kubectl get cs # 集群健康情况
kubectl cluster-info # 集群核心组件运行情况
kubectl get namespaces # 表空间名
kubectl version # 版本
kubectl api-versions # API
kubectl get events # 查看事件
kubectl get nodes //获取全部节点
kubectl delete ni n ode k8N I ` F _s2 //删除节点
kubectl rollout status deploy nginx-test


创建
kubectl create -f ./U C R % b Dnginx.yaml # 创建资源
kubectl cre5 7 ` Zate -f . # 创建当前目录下的所有yaml资源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml # 使用多个文件创m S E s X建资源
kubectl create -f ./dir # 使用2 m ; T I [目录下的所有清单文件来创建资源
kub6 F 0 u j Y Jectl create -f https://git.io/vPieo # 使用 url 来创建资源
kubectl run -i --tty busybox --imaz k 5ge=busybox ----创建带有终端的pod
kubectl run nginx --image=nginx # 启动一个 nginx 实例
kubectl run mybusybox --image=busybox --replicas=5 ----启动多个pod
kubectl explain pods,sv/ 3 O dc # 获取 pod 和 svc 的文档


更新
kubectl rolling-upS K x b x 2datQ | ^ | Q }e python-v1 -f python-v2.json # 滚动更 K 7 . s q新 pod frontend-v1
kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新K 5 ; ` ? B k P do A # 3源名称并更新镜像
kubectl rolling-update python --image=image:v2 # 更新 frontend pod 中的镜像
kubectl rolling-update python-v1 python-v2 --ro2 0 Vllback # 退出h N H已存在的进行中的滚动更新
cX j _ Q : ,at poS 9 C S ` Ud.json | kubectl replace -f - # 基于 stdin 输入的 JSON 替换 pod
强制替换,删除后k c ) , ? e 7重新创建资源。会导致S p / k 3 % E Y z服务中断。
kubectl replace --force -f ./pod.jsE 4 / 0 # / I =on
为 nginx RC 创建服务,启用P ~ ,本地 80 端口连接到容器上的 8000 端口
kubectl expose rc nginx --port=80 --target-port=8000


更新单容器 pod 的镜像$ & c版本(tag)到 v4
kub6 , t A B ; ~ *ectl get p0 A i = 5 x {od nginx-pod -o yaml | sed 's/(imaT D m N K 7 W + go [ g X 9 (e: myimage):.*$/1:v4/' | kubectl repp ? I M b Zlace -f -
kubectl label pods nginx-pod new-label=awesome # 添加标签
kubectl annotate pods nginx-pod icon-url=http://goo.gl/XXBTWq # 添加注解
kubectl autoscale depl% * X - Aoyment fo3 E / T go --min=2 --max=10 # 自动扩展 deployment “foo”


编辑资源
kubectl edit svc/dockeR { + 6r-registry # 编辑名为 docker-registry 的 service
KUBES ! u_EDITOR="nano" kubectl edit svc/V r 3 u O ] y 7 -docker-registry # 使用其它编辑器


动态伸I m A h Q h T = G缩pod
kubectl scale --replicas=3 rs/foJ 7 X v : )o # 将foo副本集变成3个
kubectl sM x . Q ] M ncale --replicas=3 -f foo.yaml # 缩放“fooI m M H l 1 G Q ;”中指定的资源o o P . O _ ~ G y
kubectl scale --current-replica1 m k ss=2 --X a | , i U W J Qreplicas=3 deployment/mysql # 将depl@ z a m i = J ]oyment/mysql从2个变成3个
kubectl scale --replicas=5 rc/foo rc/bar rc/baz? 7 H # 变更多个控制器的数量
kubectl rollout status deploy deployment/mysql # 查看变更进度


删除
kubectl delete -f ./pod.json # 删除 pod.json 文件中定义. 8 I G i V的类型和名称的 pod
kubectl delete pod,service baz foo # 删除名为“baz”的 pO x & l D } I `od 和名为“foo”的 service
kubectl delete po3 S : 9 # / $ c sds,services -l name=myLabel # 删除S } E 2 * 5 { Q具有 name=myLabel 标签的 pod 和 ser: Y T $ z T pivcet r :
kubectl delete pods,se_ 5 8 z g ?rvices -l name=myLabel --include-u3 z ~ninV # s `itialized # 删除具有 nq % s g 9 h C ;ame=myLabel 标签的 pk L & P @ mod 和 service,包括尚未初始| j Z p化的
kubectl -n my-ns delete pog @ u,svc --all # 删除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的
kubectl delete poe 6 O O . , ] # ads prometheus-7fcfcb9f89-qkkf7 -% 5 v t X w-grace-peri& N - # : 8od=0 --force 强制删除


交互
kubectl lP * u r ] Eogs nginx-p2 { 7 H U eod # dump 输出 pod 的日志(stdoU f h W . a J , Put)! P ~ 0 { Z `
kubectl logs nginx-pod -c my-container # duu x P - ( =mp 输出 poY ] yd 中容器的日志(stdout,pod 中有多个容2 H % 8 n器的情况下使用)
kubectl logs -f nginx-pod # 流式输出 pod 的日志(stdout)
kubectl logs -f nginx-pod -c my-containy J L c D L K ker # 流式输出 pod 中容器的日志(stdout,pod 中有多个容器M H B a L E N Z S的情况下使用)
kubectl run -i --tty busybox --image=busybox -- sh # 交互式 shell 的方式运行 pod
kubectl attach nginx-pod -i # 连接到运行中 l g Q的容器
kubectl port-forward nginx-pod 5000:6000 # 转发 pod 中的 6B n h ; t000 端口到本地的 5000 端口
kubectl exec nginx-pod -- ls / # 在已存在的容器中执行命令(只有一个容器的情况下)
kubectl exec nginx-pod -c myX , . ; 4 | !-container -- ls / # 在已存在的容器中执行命令(s V 7 1pod 中有多个容器的情况下)
kubectl top pod POD_NAME --containers # 显示指定 pod和容器的指标度量


调度配置
$ kubectl cordon kg # L $ Z W s8s-node # 标记 my-node 不可- y } m | b a 0调度
$ kubectl drain k8s-node # 清空 my-node 以待维护
$ kubectl N g ! H uncordon k8s-node # 标记 my-node 可调度
$ kubectl top nodL H * B v le k8s-node # 显示 my-node 的指标度量
$ kubectl cluster-infW 2 k / io dump # 将当前集群状态输出到 stdout
$ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state
#如果该z c / v f R ?键和影响N { Q T G S的污点(taint)已存在,则使用指定的值替换
$ kubectl taint nodes foo dedicated=special-user:NoSchedule