(一)k8s------kubeadm方式安装 , init流程,master高可用,dashboard, k8s升级,kubeadm命令

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

在这里插入图片描述

4. master 配置 kube 证书


证书中包 kube-apiserver 地址及相关认证信息

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

授权

sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

cat /root/.kube/config

验证 k8s 状态

kubectl get cs

nodes

在这里插入图片描述

添加node节点:在node节点中执行

在这里插入图片描述

kubectl get nodes

5. 部署 flannel----在master


https://github.com/coreos/flannel/

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

或者

kubectl apply -f kube-flannel.yml

需要 确保能够访问quay.io的registery,如果镜像下载失败—更改镜像地址

会下载一个flannel的镜像

kubectl get pods -n kube-system

kubectl get pods --all-namespaces

在这里插入图片描述

在这里插入图片描述

master 证书用于添加新控制节点


kubeadm init phase upload-certs --upload-certs

W0322 11:38:39.512764 18966 validation.go:28] Cannot validate kube-proxy config - no

validator is available

W0322 11:38:39.512817 18966 validation.go:28] Cannot validate kubelet config - no validator

is available

[upload-certs] Storing the certificates in Secret “kubeadm-certs” in the “kube-system”

Namespace

[upload-certs] Using certificate key:

#会用到这个

b66cd885cbd3b94cace2ddfad3037935ba3dabc63bf2aee0c28878b6857ac53b

+++获取登录 token


kubectl get secret -A | grep admin-user

kubectl describe secret admin-user-token-lkwbr -n kubernetes-dashboard

在这里插入图片描述

7.添加 master 节点:


在另外一台已经安装了 docker、kubeadm 和 kubelet 的 master 节点上执行以下操作

在这里插入图片描述

kubeadm join 172.31.7.248:6443 \

–token 0fpghu.wt0t8adybh86jzvk \

–discovery-token-ca-cert-hash

sha256:aae2c43db9929b06c094e65a4614112676f8cafb80809c8071f2ee141edfc787 \

–control-plane \

–certificate-key b66cd885cbd3b94cace2ddfad3037935ba3dabc63bf2aee0c28878b6857ac53b

8. 添加node 节点


在node节点中执行

各 node 节点都要安装 docker kubeadm kubelet ,配置 apt 仓库、配置 docker 加速器、安装命令、启动 kubelet 服务。

root@docker-node2:~# systemctl start docker kubelet

root@docker-node2:~# systemctl enable docker kubelet

这个命令来源于初始化master端kubeadm init生成的

kubeadm join 192.168.1.200:6443 --token klom40.qsjenuw04czukdxz \

–discovery-token-ca-cert-hash sha256:ad11ca7bf6e6e2260b3d8a5b2e52f8d8280e59c2d647d58b7b41580f2655f893

在这里插入图片描述

Node 节点会自动加入到 master 节点,下载镜像并启动 flannel,直到最终在 master 看 到 node 处于 Ready 状态

在这里插入图片描述

:Node 节点会自动加入到 master 节点下载镜像并启动 flannel,直到在 master看到 node 处于 Ready 状态

在这里插入图片描述

9. k8s 创建容器并测试


创建测试容器,测试网络连接:

docker pull alpine

–reolicas创建几个pods

kubectl run net-test1 --image=alpine --replicas=2 sleep 360000

在这里插入图片描述

kubectl get pod,svc

验证 各个节点状态


验证 master 状态:

kubectl get nodes

NAME STATUS ROLES AGE VERSION

kubeadm-master1.magedu.net Ready master 12m v1.17.3

kubeadm-master2.magedu.net Ready master 6m30s v1.17.3

kubeadm-master3.magedu.net Ready master 5m39s v1.17.3

验证 k8s 集群状态:

kubectl get cs

NAME STATUS MESSAGE ERROR

controller-manager Healthy ok

scheduler Healthy ok

etcd-0 Healthy {“health”:“true”}

当前 csr 证书状态:

kubectl get csr

NAME AGE REQUESTOR CONDITION

csr-7bzrk 14m system:bootstrap:0fpghu Approved,Issued

csr-jns87 20m system:node:kubeadm-master1.magedu.net Approved,Issued

csr-vcjdl 14m system:bootstrap:0fpghu Approved,Issued

验证 node 节点状态

kubectl get node

部署 web 服务 dashboard:

=======================================================================================

https://github.com/kubernetes/dashboard

在这里插入图片描述

部署 dashboard

kubectl apply -f dashboard-2.0.0-rc6.yml -f admin-user.yml

获取登录 token

kubectl get secret -A | grep admin-user

kubectl describe secret admin-user-token-lkwbr -n kubernetes-dashboard

在这里插入图片描述

验证 NodePort

在这里插入图片描述

登录 dashboard:

https://172.31.3.107:30002/#/login

在这里插入图片描述

三. kubeadm init 流程

=====================================================================================

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/

在这里插入图片描述

四. kubeadm 升级 k8s 集群

=======================================================================================

升级 k8s 集群必须 先升级 kubeadm 版本到目的 k8s 版本

1.升级master


验证当 k8s 前版本

kubeadm version

安装指定版本 kubeadm

#查看具体版本

root@docker-node1:~# apt-cache madison kubeadm

#安装指定 新版本版本

root@docker-node1:~# apt-get install kubeadm=1.20.6-00 kubeadm=1.20.6-00 kubectl=1.20.6-00

#验证版本

root@docker-node1:~# kubeadm version

kubeadm 升级命令使用帮助

root@docker-node1:~# kubeadm upgrade --help

升级计划

kubeadm upgrade plan #查看升级计划

在这里插入图片描述

开始升级

kubeadm upgrade apply v1.20.6

在这里插入图片描述

在这里插入图片描述

最后验证镜像是否升级成功

docker images

2. 升级 kubelet的 node节点


否则 node 节点还是 1.13.5 的旧版本,但是 server 已经是 1.13.6

在这里插入图片描述

root@docker-master:~# kubeadm upgrade node config --kubelet-version 1.20.6

root@docker-master:~# kubectl get nodes

升级 node 节点配置文件

root@docker-master:~# kubeadm upgrade node config --kubelet-version 1.20.6

各 Node 节点升级 kubelet 二进制包

root@docker-node1:~# apt-get install kubelet=1.20.6-00 kubeadm=1.20.6-00 kubectl=1.20.6-00

root@docker-node2:~# apt-get install kubelet=1.20.6-00 kubeadm=1.20.6-00 kubectl=1.20.6-00

最终版本

在这里插入图片描述

测试运行 Nginx+Tomcat

====================================================================================

https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/

运行 Nginx:


cd /opt/kubdadm-yaml

cat nginx/nginx.yml

apiVersion: apps/v1

kind: Deployment

metadata:

namespace: default

name: nginx-deployment

labels:

app: nginx

spec:

replicas: 1

selector:

matchLabels:

app: nginx

template:

metadata:

labels:

app: nginx

spec:

containers:

  • name: nginx

image: nginx:1.15.4 或者是harbor中的镜像

ports:

  • containerPort: 80

kind: Service

apiVersion: v1

metadata:

labels:

app: magedu-nginx-service-label

name: magedu-nginx-service

namespace: default

spec:

type: NodePort

ports:

  • name: http

port: 80

protocol: TCP

targetPort: 80

nodePort: 30004

selector:

app: nginx

kubectl apply -f nginx/nginx.yml

运行 tomcat:


docker pull tomcat

mkdir /usrlocal/src/kubdam-qcq/tomcat-dockerfile

vim Dockerfile

FROM tomcat

ADD ./app /usr/local/tomcat/webapps/app/

vim app

tomcat image page

打镜像 可以直接达到harbor中—harbor地址要正确

docker build -t harbor.qcq.com/linux/tomcat:app .

也可以打到本地

docker build -t tomcat:v1 .

测试

docker run -it --rm -p 8080:8080 tomcat:v1

然后访问ip:8080/app/

然后

docker tag

docker push 到harbor

cd /opt/kubdadm-yaml

cat tomcat/tomcat.yml

apiVersion: apps/v1

kind: Deployment

metadata:

namespace: default

name: tomcat-deployment

labels:

app: tomcat

spec:

replicas: 1

selector:

matchLabels:

app: tomcat

template:

metadata:

labels:

app: tomcat

spec:

containers:

  • name: tomcat

image: harbor地址中的tomcat

ports:

  • containerPort: 8080

kind: Service

apiVersion: v1

metadata:

labels:

app: magedu-tomcat-service-label

name: magedu-tomcat-service

namespace: default

spec:

type: NodePort

ports:

  • name: http

port: 80

protocol: TCP

targetPort: 8080

#nodePort: 30005

selector:

app: tomcat

创建Nginx pod

kubectl apply -f nginx/tomcat.yml

查看一下是否起来

kubectl get pod

从 dashboard 进入容器

在这里插入图片描述

测试访问 Nginx

在这里插入图片描述

访问 tomcat:

进入 tomcatpod 生成 app

kubectl get pod

kubectl exec -it tomcat-deployment-78c89857d6-p5tv7 bash

cd webapps

mkdir tomcat

echo “Tomcat test page for Pod” > tomcat/index.html

在这里插入图片描述

Nginx 实现动静分离


Nginx 配置:

在这里插入图片描述

在这里插入图片描述

进入到 nginx Pod

kubectl exec -it nginx-deployment-67656986d9-f74lb bash

cat /etc/issue

Debian GNU/Linux 9 \n \l

更新软件源并安装基础命令

apt update

apt install procps vim iputils-ping net-tools curl

测试 service 解析

/# ping magedu-tomcat-service

测试在 nginx Pod 通过 tomcat Pod 的 service 域名访问:

/# curl magedu-tomcat-service.default.svc.magedu.local/tomcat/index.html

Tomcat test page for Pod

修改 Nginx 配置文件实现动静分离,Nginx 一旦接受到有/tomcat 的 uri 就转发给 tomcat

/# vim /etc/nginx/conf.d/default.conf

location /tomcat {

proxy_pass http://magedu-tomcat-service.default.svc.magedu.local;

}

测试配置文件

/# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

重新加载配置文件

/# nginx -s reload

2020/03/22 09:10:49 [notice] 4057#4057: signal process started

在这里插入图片描述

通过 HAProxy 实现高可用反向代理

=======================================================================================

基于 haproxy 和 keepalived 实现高可用的反向代理,并访问到运行在 kubernetes集群中业务 Pod

keepalived VIP 配置:

vrrp_instance VI_1 {

state MASTER

interface eth0

garp_master_delay 10

smtp_alert

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

172.31.7.248 dev eth0 label eth0:1

#这个VIP

172.31.7.249 dev eth0 label eth0:2

}

systemctl restart keepalived

HAProxy 反向代理配置:

listen k8s-6443

bind 172.31.7.248:6443

mode tcp

balance roundrobin

server 172.31.3.101 172.31.3.101:6443 check inter 2s fall 3 rise 5

node节点,直接监听为80端口

listen k8s-magedu-80

bind 172.31.7.249:80

mode tcp

balance roundrobin

server 172.31.3.107 172.31.3.107:30004 check inter 2s fall 3 rise 5

server 172.31.3.108 172.31.3.108:30004 check inter 2s fall 3 rise 5

server 172.31.3.109 172.31.3.109:30004 check inter 2s fall 3 rise 5

测试通过 VIP 访问

在这里插入图片描述

token管理


1.令牌登登陆

kubeadm token --help

create #创建 token,默认有效期 24 小时

delete #删除 token

generate #生成并打印 token,但不在服务器上创建,即将 token 用于其他操作

list #列出服务器所有的 token

在这里插入图片描述

设置token登录会话保持时间

vim dashboard/kubernetes-dashboard.yaml

image: 192.168.200.110/baseimages/kubernetes-dashboard-amd64:v1.10.1

ports:

  • containerPort: 8443 4

protocol: TCP

args:

  • –auto-generate-certificates

  • –token-ttl=43200

session保持

sessionAffinity: ClientIP

sessionAffinityConfig:

clientIP:

timeoutSeconds: 10800

2. Kubeconfig登录

制作Kubeconfig文件

dashboard下面有一个

vim /root/.kube/config

加入一行

注意严格的缩进,前四,后一 空格

token: 令牌

在这里插入图片描述

token内容

在这里插入图片描述

然后将这个文件下载到桌面

登陆时用kubeconfig登陆,选择config文件

reset 命令:


kubeadm reset #还原 kubeadm 操作

kubeadm 命令

=============================================================================

命令使用

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/

集群初始化名:

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/

–apiserver-advertise-address string #API Server 将要监听的监听地址

–apiserver-bind-port int32 #API Server 绑定的端口,默认为 6443,

–apiserver-cert-extra-sans stringSlice #可选的证书额外信息,用于指定 API Server

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
在这里插入图片描述

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

在这里插入图片描述

最新整理大厂面试文档

在这里插入图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ss=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY5NzI5Mw==,size_16,color_FFFFFF,t_70)

然后将这个文件下载到桌面

登陆时用kubeconfig登陆,选择config文件

reset 命令:


kubeadm reset #还原 kubeadm 操作

kubeadm 命令

=============================================================================

命令使用

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/

集群初始化名:

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/

–apiserver-advertise-address string #API Server 将要监听的监听地址

–apiserver-bind-port int32 #API Server 绑定的端口,默认为 6443,

–apiserver-cert-extra-sans stringSlice #可选的证书额外信息,用于指定 API Server

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
[外链图片转存中…(img-221FJF6n-1715722198572)]

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

[外链图片转存中…(img-dD0T8qTq-1715722198572)]

最新整理大厂面试文档

[外链图片转存中…(img-BKF4XwPf-1715722198573)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值