最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
证书中包 kube-apiserver 地址
及相关认证信息
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
授权
sudo chown ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config
cat /root/.kube/config
验证 k8s 状态:
kubectl get cs
nodes
添加node节点:在node节点中执行
kubectl get nodes
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
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
kubectl get secret -A | grep admin-user
kubectl describe secret admin-user-token-lkwbr -n kubernetes-dashboard
在另外一台已经安装了 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
在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
状态
创建测试容器,测试网络连接:
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
=======================================================================================
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
=====================================================================================
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
=======================================================================================
升级 k8s 集群必须 先升级 kubeadm 版本到目的 k8s 版本
验证当 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
否则 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
最终版本
====================================================================================
https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
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
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 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 和 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 访问
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文件
kubeadm reset
#还原 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收集的一些大厂的面试真题
最新整理电子书
最新整理大厂面试文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
ss=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY5NzI5Mw==,size_16,color_FFFFFF,t_70)
然后将这个文件下载到桌面
登陆时用kubeconfig登陆,选择config文件
kubeadm reset
#还原 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)]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。