可以说当年kubernetes是借着Docker的东风才发展状大的。当然,kubernetes本身也的确优秀,毕竟它是google多年先进编排理念积累的成果。
kubectl命令一般都挺长的,经常重复输入还挺麻烦的,其实也是可以让它自动补全的。
默认bash包含了自动补全,只要输入命令的前几个字母,再按TAB键,如果这几个字母有很多命令匹配到会全部列出让选择,如果只匹配到一个,就会直接补全命令。 但这种补全一般是只针对命令和文件名。
【Minikube】
Minikube是由Kubernetes官方维护的单机版的Kubernetes,支持Kubernetes的大部分功能,从基础的容器编排管理,到高级特性如负载均衡、Ingress,权限控制等。使用最新的官方stable版本。
非常适合作为Kubernetes入门、实验和开发测试环境使用。
支持macOS、Linux和Windows等多平台。
网址:https://minikube.sigs.k8s.io
有时候需要在k8s容器中给一些主机名做一下域名解析指向某一个IP地址,一般想到的都是在容器中的/etc/hosts添加配置,但这种方法不够智能,修改一次就要重新创建一个镜像,非常麻烦。
这里有两种方便设置的方法:
一种是用hostAliases 在yaml中的spec块中添加一个hostAliases,然后根据格式写上IP地址和想要解析的域名。
....... spec: hostAliases: - ip: "172.11.0.23" hostnames: - pre.itbing.local ...... 这样就会把pre.itbing.local解析到172.11.0.23。 hostAliases的机制是会把这个域名解析添加进容器中的/etc/hosts。
一种是在coreDNS添加 # kubectl -n kube-system edit configmap coredns ...... .:53 { errors health kubernetes cluster.
如果对Deployment的Pod template部分进行更改,例如更新template 中的 label 和容器镜像时,就会创建出一个新的 revision版本记录,如果想回滚恢复到以前某个版本状态,可以随时进行操作恢复。
1.先创建一个deploy 这里直接用命令创建一个nginx服务的deploy # kubectl create deploy nginx-deploy --image=nginx:1.19.0 --replicas=2 -n dev
这里用的nginx镜像是1.19.0版本
2.查看revision版本记录 查看nginx的deploy历史版本记录
# kubectl -n dev rollout history deploy nginx-deploy REVISION CHANGE-CAUSE 1 <none> 第一栏REVISION是记录修改过的历史序列号,如果要回滚可以指定一个序列号来选择恢复到哪个状态。 第二栏CHANGE-CAUSE是记录回滚的一个标注内容,这里显示为,如果想直接显示记录内容,可以在命令后加上–record,也可以用annotate和patch来后期添加
一直以为configmap/secret没办法存储二进制文件,最近有个p12的证书,也类似于二进制文件,用secret存储挂载进容器中,居然可以正常使用。 就想着其它二进制文件应该也可以吧,就拿linux下面的ls命令的文件,用configmap/secret分别存储然后挂载进容器中,也都可以正常使用。
简单的实验步骤: 制作一个configmap,存储文件是ls这个命令文件。
# kubectl create configmap configmap-ls --from-file=/root/ls
注意:要把容器里的ls命令复制到你执行kubectl命令的这个系统上用来configmap存储,因为可能你执行命令的这个系统和容器的系统不一样,你如果用这个系统上的ls命令挂载进去,可能没办法正常使用。
然后在deploy中,制作一个挂载配置,把这个configmap挂载进容器中。
............ volumeMounts: - mountPath: /configmap/ name: configmap-ls ........... volumes: - configMap: defaultMode: 420 name: configmap-ls name: configmap-ls ls这个命令文件就会在这个容器挂载的目录/configmap/下。因为这个容器中的挂载目录是只读的,需要从挂载目录中把ls文件复制出来,再授予它执行权限就可以正常使用了。(具体步骤可以自己去操作)
把k8s/k3s集群导入rancher中进行管理,步骤还是很简单的。 rancher本身也是有提示说明的。
1、登录rancher。 点击“集群”,再点击右边的“添加集群”按钮
2、点击右边的“导入”链接 3、设置集群的名称(可随意)。 也可以在这里添加对集群管理的用户(成员角色),不过一般都是在后面细分权限划分。
4、这里会根据你的rancher环境生成相应的命令。到要导入的集群系统上执行这个命令就行。 [root@master1 ~]# kubectl apply -f https://rancher.xxxxxx.net/v3/import/2cp2nlnkjv2l4d9tcwg6lbj72tfmjcxtvrndvhv6kx4tjcwppctnln.yaml clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver created clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master created namespace/cattle-system created serviceaccount/cattle created Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.
Docker安装方法: 以前1.x版本,镜像名是rancher/server,现在一般都是用2.x版本,镜像名是rancher/rancher
$ docker pull rancher/rancher
这个会安装最新版本的rancher,如果想指定版本安装,可以先查询有哪些版本,再加上版本号进行安装。
$ curl -s https://registry.hub.docker.com/v2/repositories/rancher/rancher/tags/?page_size=100| jq \'."results"[] .name\' "v2.7-head" "v2.7-828fe615a30ed0302d39df1a78366ce4f4a8b381-head" "v2.7-828fe615a30ed0302d39df1a78366ce4f4a8b381-linux-amd64" "v2.7-828fe615a30ed0302d39df1a78366ce4f4a8b381-linux-arm64" "v2.7-828fe615a30ed0302d39df1a78366ce4f4a8b381-linux-s390x" "v2.7-cd8eea1fdf0dd0071bfdcae4f1eb7de2c5b3722f-head" "v2.7-cd8eea1fdf0dd0071bfdcae4f1eb7de2c5b3722f-linux-amd64" "v2.7-cd8eea1fdf0dd0071bfdcae4f1eb7de2c5b3722f-linux-arm64" "v2.7-cd8eea1fdf0dd0071bfdcae4f1eb7de2c5b3722f-linux-s390x" "v2.7-7d937a2a6322dc7aca69cb01bb06f49a62be3a9d-linux-amd64" "v2.7-530a0c4ed972e607bf4bafc91d273a8ac1c524c2-linux-amd64" "v2.7-530a0c4ed972e607bf4bafc91d273a8ac1c524c2-linux-arm64" "v2.7-7d937a2a6322dc7aca69cb01bb06f49a62be3a9d-linux-s390x" "v2.7-530a0c4ed972e607bf4bafc91d273a8ac1c524c2-linux-s390x" "v2.6-1981e7ec13d19ab91619dd1bb85a042c3ae26a6b-linux-arm64" "v2.6-1981e7ec13d19ab91619dd1bb85a042c3ae26a6b-linux-s390x" "v2.
k8s在使用时,不仅是运维人员需要使用,很多时候还需要给开发人员来使用。 给开发人员使用,就不可能让他们用命令行去使用,这个时候就需要有web页面这种管理方式。 k8s的web管理方式其实不只有dashboard这一种,还有很多其它的解决方案,比如Rancher,其实就比dashboard更好用。
一、查询kubernetes版本,下载对应的dashboard版本 安装前要先确认自己的kubernetes版本,因为dashboard要对应不同的kubernetes版本来进行安装使用,如果版本不对应,安装完打开可能会报错。
# kubectl version Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:23:04Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"} 这里kubernetes是1.
Kubernetes的安装方法主要有两种: 一种是用源码编译安装 一种是使用kubeadm工具安装 用源码安装的话,相对比较麻烦,初学者应该先用kubeadm来安装部署k8s,等熟悉了再用源码来安装。
master: k8s集群中的管理节点,一般生产中是有三个master的,达到冗余的效果。
node(worker): k8s集群中的工作节点,就是各种服务实际部署的系统。根据自己的服务数量,可以有很多个。
pod: k8s集群管理的最小单位。k8s不会直接管理docker容器,而是通过pod去管理容器,所以k8s不关心底层用的是什么容器技术。
Kubernetes管理资源的两种方式: 1、用纯命令管理 比如用命令创建一个nginx服务,并且设置2个pod负载
# kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
比如用命令更新服务的image镜像版本 # kubectl set image deploy/nginx nginx:nginx:1.8.0
2、用yaml文件管理 有纯命令管理的话,其实是不够规范化的,有问题了也不好追溯。 所以生产上其实都是用yaml文件来管理k8s,这也是官方推荐的方式。
用yaml文件创建一个nginx应用服务:
# cat nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy namespace: dev labels: app: nginx-deploy spec: replicas: 2 selector: matchLabels: app: nginx-server template: metadata: labels: app: nginx-server spec: containers: - image: nginx name: nginx ports: - containerPort: 80 protocol: TCP 执行命令用yaml创建服务 # kubectl apply -f nginx.
教大家怎么快速的来使用KVM创建一个虚拟机和管理虚拟机,如果有准备好ISO系统安装文件的话,就算是第一次使用KVM,只要跟着操作,也可以很快能创建出一个虚拟机了。
一、查看系统是否支持KVM虚拟化 查看cpu是否支持虚拟化
# grep -E'(vmx|svm)' /proc/cpuinfo flags :fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflushdts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tscart arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperfeagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnttsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epbinvpcid_single intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority eptvpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smapclflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notifyhwp_act_window hwp_epp md_clear spec_ctrl intel_stibp flush_l1d 说明CPU是Intel的,如果是AMD的CPU,应该是“svm”。
大家都知道报这个错的原因是忘了用户名前加-u这个参数造成的,比如是这样登录了MySQL
mysql -root -p (注意看,-root前面没有加u) 登录后,不管你执行什么命令,都会提示Ignoring query to other database
mysql>show databases; Ignoring query to other database 要解决这个问题,只要退出后加上-u这个参数就可以了。 # mysql -uroot -p
网上很多都写到这里为止了,但并没有去分析为什么没有加-u也能登录成功,为什么登录成功后执行sql语句会报错。
这里我就给大家分析一下为什么会这样的真正原因。
这是因为当没有带上-u执行 “mysql -root -p ”时,mysql命令把-root识别成了它的参数,而不是root这个用户。并且把root这个词识别成了四个参数,拆开来就是“-r -o -o -t"。
一、前言 我们添加磁盘后,一般都想让磁盘在重启系统后能自动挂载。 自动挂载的方法有好几种,可根据实际情况来使用,各有各的优势,也有一些需要注意的地方。
二、写进fstab 把磁盘挂载信息写进fstab文件中,一般是最先想到的方法。 只要把正确的格式写入进/etc/fstab文件中,这个磁盘就会在开机时自动挂载。
fstab文件中的格式: 磁盘路径 挂载的目录 磁盘格式 挂载的参数 是否允许备份 开机是否fsck检测磁盘
一般我们最常用的配置类似这样: /dev/vg01/lv00 /mnt xfs defaults 0 0
意思是/dev/vg01/lv00这个LVM分区挂载在/mnt目录上,磁盘格式为xfs,使用的是默认的defaults挂载参数,0表示不备份磁盘,0表示开机不检测磁盘。
三、写进rc.local 虽然有了/etc/fstab这种自动挂载方式,但在一些场合下,我们还需要用rc.local这种方式。 一般我们写入到/etc/fstab这里的挂载磁盘,是服务器自带的磁盘,是一般不会出问题的磁盘,也是需要从一开机就从底层开始启动的磁盘。 但也有一些我们不能保证是正常在用的磁盘,比如NFS远程磁盘、光驱磁盘等,这些磁盘都是有可能失效的,如果写进/etc/fstab中,一旦失效后重启,系统就可能卡住,这不是我们想看到的。
写进rc.local很简单,就是把mount命令写进去即可。 mount -t 磁盘格式 磁盘分区 挂载的目录
一、前言 Telnet是一个用来远程连接服务器或者设备执行操作的一个服务。但是由于是使用明文传输,现在基本上已经弃用了。 为什么我这里还要讲这个安装呢?主要是有时候在Linux系统做升级OpenSSH时,为了保险起见,一般都需要先启用Telnet服务,以防止由于OpenSSH升级失败而登录不上服务器或者设备。 由于Telnet服务在CentOS6和CentOS7上安装和配置方法都不一样,所以需要分开来写。
二、在CentOS6上的安装及启用 2.1 安装telnet-server 在CentOS6中,telnet服务是由xinetd管理的,没有单独的服务,所以需要一起安装xinetd才行。 注意,在Linux系统中,telnet服务相对应的软件名称是telnet-server,而不是telnet,telnet这个名称只是telnet服务的客户端。
# yum install xinetd telnet-server
执行 chkconfig –list,在最后一段会显示由xinetd管理的一些服务。
# chkconfig --list ........ xinetd based services: chargen-dgram: off chargen-stream: off daytime-dgram: off daytime-stream: off discard-dgram: off discard-stream: off echo-dgram: off echo-stream: off rsync: off tcpmux-server: off telnet: off time-dgram: off time-stream: off 可以看到,telnet服务是off的状态。
当我们制作好了一个满意的镜像后,想保存下来以后随时随地使用,就需要有一个库来保存。
保存库主要有三种方式: 1、直接把制作好的镜像上传到Docker hub官方 2、上传到国内一些有提供私有库保存的网站,如阿里云 3、自己创建一个私有库来保存
如果是公司用,还是自己创建私有库来保存。 如果是个人,镜像不多,可以上传到Docker国内一些网站上保存。
前一篇文章讲了用Docker普通方法创建Tomcat服务,大家对Docker容器已经有了一定的认识。 Docker更好的地方是可以完全定制化自己的镜像和容器。
我们可以通过创建Dockerfile文件定制化自己的镜像。 Dockerfile文件支持的指令大概有十三个: FROM MAINTAINER RUN CMD EXPOSE ENV ADD COPY ENTRYPOINT VOLUME USER WORKDIR
通过这十三个命令,我们就可以构建我们自己的镜像了。
首先,创建一个目录,用于存放Dockerfile文件和制作镜像需要的一些文件。 # mkdir nginx # cd nginx # vim Dockerfile FROM centos:7 MAINTAINER itbing xxxxx@qq.
概述 在CentOS7上安装好Docker,只是一个开始,后面的路还很长。
安装完就要开始用起来,现在我们就通过几个实例来简单讲一下Docker的应用,让大家有个直观的认识。 要在容器中运行程序或应用,有两种方法: 一种是直接使用别人制作好的镜像,直接下载过来使用就可以; 一种是使用Dockerfile文件自己制作镜像。(但也是在一个基础镜像上制作)
一、在容器中运行Tomcat 先查询Docker官网上有提供哪些Tomcat版本
# docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementati¡ 2523 [OK] tomee Apache TomEE is an all-Apache Java EE certif¡ 67 [OK] dordoka/tomcat Ubuntu 14.
前面有一篇讲了 在 CentOS 6上安装 docker-io/docker-engine
CentOS6上虽然还可以安装Docker,但是不推荐在CentOS6上进行安装,CentOS6也没办法安装最新版本的docker-ce版本。 如果要学习和在生产中使用Docker,推荐在CentOS7上安装docker-ce版本。
一、在CentOS7上安装docker-ce 在CentOS7上安装Docker还是比较简单的。
CentOS本身就有提供一个docker版本可以安装,但版本较旧,不推荐使用。
# yum list|grep docker docker.x86_64 1.13.1-102.git7f2769b.el7.centos 要想安装最新版的Docker版本,还是需要从Docker官网下载repo文件来进行安装。 把repo文件下载到/etc/yum.repos.d目录下。
#cd /etc/yum.repos.d #wget https://download.docker.com/linux/centos/docker-ce.repo 开始安装:
# yum install docker-ce Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.