在centos7中部署kubernetes集群

在部署之前呢,我们准备三台机器,安装centos7的操作系统,工作准备就绪,我开始进行安装k8s前系统基本设置。

1、进入这三台机器,编辑/etc/hosts加入:

10.6.15.10 k8s-master

10.6.15.11 node01

10.6.15.12 node02

2、禁用selinux

编辑/etc/sysconfig/selinux,修改成SELINUX=disabled

3、启用br_netfilter模块

4、禁用交换分区

swapoff -a

然后编辑/etc/fstab文件,将swap这行注释掉

5、安装docker-ce

6、安装kubernets,创建repo文件:

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

安装:yum install -y kubelet kubeadm kubectl

重启机器,然后完毕后让docker开机启动:

systemctl start docker && systemctl enable docker

systemctl start kubelet && systemctl enable kubelet

7、修改docker的cgroup Driver,修改这步骤主要是k8s用的是systemd,要保存跟k8s一致,如果不一致初始化时会有警告:

运行:docker info | grep -i cgroup 查看

修改为systemd方式,新建文件:

vi /etc/docker/daemon.json 加入

{
“exec-opts”: [“native.cgroupdriver=systemd”]
}

重启docker:systemctl restart docker &&systemctl status docker

以上步骤要在master和所有node节点全部执行。

8、master初始化:

kubeadm init –pod-network-cidr 10.244.0.0/16

指定pod网段,初始化完毕后会有提示,按提示操作就可以了,如下:

mkdir -p $HOME/.kube

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

chown $(id -u):$(id -g) $HOME/.kube/config

9、安装网络插件flannel:

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

10、验证:

kubct get nodes

kubectl get pods –all-namespaces

11、加入node节点:

复制初始化后的kubeadm join 命令,在node1上执行,成功后回到master节点,运行:kubectl get nodes, 查看结果,一会就会变成ready状态。

12、测试集群情况,在master节点,运行:

kubectl create deployment nginx –image=nginx

kubectl get pod

kubectl describe deployment nginx

kubectl create service nodeport nginx –tcp=80:80

kubectl get svc

curl node01:30982

到此安装完毕,出现的问题,中间Kubeadmin apiserver ip地址写错了,中间发现错误,ctrl+c结束了任务,结果后面修改正确master地址后也不能执行Init了,后来通过修改master ip地址方式解决,如下:

master节点污点设置,可以调度到master节点上:

kubectl get pods -o wide

kubectl describe node k8s-master|grep -i taints #查看

Kubectl taint nodes k8s-master node-role.kubernetes.io/master- #删除现在污点

设置污点语法:kubectl taint node [node] key=value[effect]

打回刚才master污点命令如下:

kubectl taint nodes k8s-master key1=value1:NoSchedule

这样就恢复了之前删除的master污点前的设置。

 

参考链接:
https://cloud-atlas.readthedocs.io/zh_CN/latest/kubernetes/deployment/bootstrap_kubernetes/change_master_ip.html

##########################################################################

2  journalctl 使用方法

 

.查看所有日志

默认情况下,只保存本次启动的日志

journalctl

.查看内核日志(不显示应用日志)

journalctl -k

.查看系统本次启动的日志

journalctl   -b

journalctl  -b  -0

.查看上一次启动的日志

需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志。

journalctl  -b -1

.查看指定时间的日志

journalctl –since=”2012-10-3018:17:16″

journalctl –since “20 minago”

journalctl –since yesterday

journalctl –since”2015-01-10″ –until “2015-01-11 03:00”

journalctl –since 09:00 –until”1 hour ago”

journalctl –since”15:15″ –until now

.显示尾部的最新10行日志

journalctl  -n

.显示尾部指定行数的日志

查看的是/var/log/messages的日志,但是格式上有所调整,如主机名格式不一样而已

journalctl -n 20

.实时滚动显示最新日志

journalctl   -f

.查看指定服务的日志

journalctl  /usr/lib/systemd/systemd

.查看指定进程的日志

journalctl   _PID=1

.查看某个路径的脚本的日志

journalctl    /usr/bin/bash

.查看指定用户的日志

journalctl _UID=33  –since today

.查看某个Unit的日志

journalctl  -u nginx.service

journalctl  -u nginx.service  –since  today

.实时滚动显示某个Unit的最新日志

journalctl  -u nginx.service  -f

.合并显示多个Unit的日志

journalctl  -u nginx.service  -u php-fpm.service  –since today

​查看指定优先级(及其以上级别)的日志

日志优先级共有8级

0: emerg

1: alert

2: crit

3: err

4: warning

5: notice

6: info

7: debug

journalctl  -p err  -b

.不分页标准输出

日志默认分页输出–no-pager改为正常的标准输出

journalctl  –no-pager

.以JSON格式(单行)输出

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgramming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java,JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

“名称/值”对的集合(A collection ofname/value pairs):不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associativearray)。

值的有序列表(An ordered list of values):在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

例子

以JSON格式(单行)输出

journalctl  -b -u httpd.service  -o json

.以JSON格式(多行)输出,可读性更好,建议选择多行输出

journalctl  -b -u httpd.service  -o json-pretty

.显示日志占据的硬盘空间

journalctl  –disk-usage

.指定日志文件占据的最大空间

journalctl   –vacuum-size=1G

.指定日志文件保存多久

journalctl   –vacuum-time=1years

其它文章:

https://www.cnblogs.com/tianleblog/p/12108391.html

http://www.mydlq.club/article/4/#wow13