在部署之前呢,我们准备三台机器,安装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模块
1 2 |
modprobe br_netfilter echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables |
4、禁用交换分区
swapoff -a
然后编辑/etc/fstab文件,将swap这行注释掉
5、安装docker-ce
1 2 3 |
yum install -y yum-utils device-mapper-persistent-data lvm2\ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y 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地址方式解决,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
systemctl stop kubelet docker cd /etc/ # backup old kubernetes data mv kubernetes kubernetes-backup mv /var/lib/kubelet /var/lib/kubelet-backup # restore certificates mkdir -p kubernetes cp -r kubernetes-backup/pki kubernetes rm kubernetes/pki/{apiserver.*,etcd/peer.*} systemctl start docker # reinit master with data in etcd # add --kubernetes-version, --pod-network-cidr and --token options if needed # 原文使用如下命令: # kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd # 但是由于我使用的是Flannel网络,所以一定要加上参数,否则后续安装 flannel addon无法启动pod kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd --pod-network-cidr=10.244.0.0/16 # update kubectl config cp kubernetes/admin.conf ~/.kube/config # wait for some time and delete old node sleep 120 kubectl get nodes --sort-by=.metadata.creationTimestamp kubectl delete node $(kubectl get nodes -o jsonpath='{.items[?(@.status.conditions[0].status=="Unknown")].metadata.name}') # check running pods kubectl get pods --all-namespaces |
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污点前的设置。
##########################################################################
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