K8S集群问题解决记录二
目录概念概念k8s 是google采用go语言翻版自己的borg概述:2013年 谷歌开源的容器化集群管理系统,让容器化部署更简洁特性:自动装箱、自我修复架构组件master--主控节点、管理者node--工作节点 、做事的master里面:apiserver:集群统一入口,以restful方式,交给etcd存储sheduler:节点调度--选择node节点(判断哪个node空间大、空闲等等)在里
j8s使用yaml安装jenkins,一直是pending
项删除pod结果失败
后想通过重新执行命令进行覆盖,执行cd jenkins-master
kubectl create -f . 报错,提示
Error from server (AlreadyExists): error when creating "Service.yaml": services "jenkins" already exists
Error from server (AlreadyExists): error when creating "ServiceaAcount.yaml": serviceaccounts "jenkins" already exists
Error from server (AlreadyExists): error when creating "StatefulSet.yaml": statefulsets.apps "jenkins" already exists
Error from server (AlreadyExists): error when creating "rbac.yaml": roles.rbac.authorization.k8s.io "jenkins" already exists
通过
kubectl delete -f Service.yaml
kubectl delete -f ServiceaAcount.yaml
kubectl delete -f StatefulSet.yaml
kubectl delete -f rbac.yaml
挨个删除
查看kubectl get pods -n kube-ops ,发现jenkins 已不存在了
查看日志
journalctl -f -u kubelet
systemctl status kubelet.service
重置
kubeadm reset
/sys/fs/cgroup/pids/libcontainer_113839_systemd_test_default.slice
/sys/fs/cgroup/pids/libcontainer_113839_systemd_test_default.slice
yaml采用缩进标识层级关系,不支持tab .---表示新起一个yaml
apiversion API标本
kind 资源类型 kubectl --help ,api-resources
----
yaml通常通过生成方式,快速创建2种方式:
1、kubectl create 命令生成yaml文件
2、使用kubectl get 命令导出yaml文件
k8s最小单位是pod
k8s不会直接处理容器,而是处理pod,一个Pod包含1个或多个容器
一个pod中,网络是共享的
pod是短暂的,比如重新创建或启动
pod存在的意义:
docker 对应容器 ,是单进程 (能反复调用的,守护进程)
docker ---一个程序--单进程
pod是多进程的设计,运行多个应用程序--多个docker,通过pod管理多个进程
pod--多个docker容器--多个程序
Pod为了亲密性:
2个应用之间互相调用
网络之间调用
2个应用需要频繁调用
pod里2个应用程序相当于本地调用
pod实现机制:
多个容器,在同一个namespace里面,共享网络
实现原理:首先创建pause(又叫info)容器,一个ip 一个port
接下来所有同namespace的容器,都加入pause ,实现网络共享
pod共享存储:
引入数据卷概念Volumn 使用数据卷进行持久化,通过挂载进行共享
进项拉取策略:
statefulset.yaml中间部分,拉取jenkins
pod资源限制:
pod资源请求 container限制(docker来做限制)
pod在调度时,容器限制最大资源
pod重启机制:
几种策略
pod健康检查:
running状态,可能容器内部不能提供服务了,应到应用层面进行检查
2种检查:存活检查,就绪检查
三种检查方式 httpget exec tcpsocket
k8s init 报错:[kubelet-check] Initial timeout of 40s passed.
解决:卸载k8s,创建配置文件:https://blog.csdn.net/weixin_40161254/article/details/112232302,重新init
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
docker-1.12.6
yum install -y kubelet-1.18.1 kubeadm-1.18.1 kubectl-1.18.1
kubeadm reset
kubeadm init \--apiserver-advertise-address=192.168.0.201 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.18.1 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16
临时解决,重启失效
modprobe br_netfilter
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
cat >>/etc/hosts<<EOF
192.168.0.190 k8s-master
192.168.0.195 k8s-node1
192.168.0.197 k8s-node2
EOF
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
cat > /etc/docker/daemon.json << EOF
{ "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] }
EOF
kubeadm join 192.168.0.201:6443 --token etj3qd.wux7kdk2l0b2l5rj \--discovery-token-ca-cert-hash sha256:8fde72a8defcd909b9b28ecb661b049b33da4419cd89d0f08cadab67a0c1d501
-----------
查看jenkins密码
kubectl logs $(kubectl get pods -n kube-ops| awk '{print $1}' | grep jenkins) -n kube-ops #kube-ops是你的namespace
kubectl get namespaces #查看命名空间(命名空间包含了pods)
kubectl get pod --namespace=kube-ops #查看具体命名空间下的pod
kubectl get pod jenkins-0 -n kube-ops -o yaml | kubectl replace --force -f - # 重启 namespace kube-ops下面的pod:jenkins-0,此命令执行后,查看pod状态为终止,稍等片刻会变成running
安装docker-compose因为版本问题,一直下载不了,换了个版本 就OK了
构建镜像
docker build -t 镜像名 . #.代表默认路径
查看镜像
docker images
推送镜像到harbor报错,需要在vi /etc/docker/daemon.json 把harbor地址(192.168.0.208:85)加进去,
还需要用镜像加速器:"registry-mirrors": ["https://z1n7jdsa.mirror.aliyuncs.com"] ,每个人阿里控制台 容器镜像服务,镜像工具里都有自己的地址,建议使用自己的
然后重启docker
还需要登录才可以 docker login -u admin -p Harbor12345 192.168.0.208:85 一开始登录不上,重装harbor服务器上面的docker-compose 版本 1.24.0 harbor重装,再登录好了
----接下来测试Jenkins-Slave是否可以创建,需要编写piepeline脚本
1、服务器重启后,jenkins访问不了了。重启jenkins容器(重启了服务器master,重启kubelet后才可以访问)
2、服务器重启后,harbor无法访问,执行harbor stop 全部done以后再start (也尝试重启了docker kubelet)
3、pipeline动态创建jenkins-slave节点,一直阻塞住。改k8s 云配置,k8sURL jenkins URL(刚开始是按照文档写的,不行,改了,还不行,改回去好了)好了
动态创建jenkins-slave节点,随着构建job结束,容器也会自动销毁 (构建的时候,在master服务器上观察kubectl get pod --namespace=kube-ops,动态的节点会从创建中,到运行,到终止,到消失)
更多推荐
所有评论(0)