Kubernetes 安装及相关环境搭建手册

环境配置
设置系统主机名以及host文件的相互解析

hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

以下安装步骤主从节点都要执行
安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

设置防火墙为iptables并设置空规则

systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

关闭selinux

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

调整内核参数,对于k8s

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

关闭系统不需要的服务

systemctl stop postfix && systemctl disable postfix

systemd-journald 用于检索 systemd 的日志,是 systemd 自带的日志系统。
设置rsyslogd 和systemd journald

mkdir /var/log/journal
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf << EOF
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=10G
SystemMaxFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

查看内核版本,需要讲内核升级到4.4版本,老版本会有问题

cat /proc/version
4.4.237-1.el7.elrepo

升级系统内核为4.44

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

设置系统重启后内核版本加载,以下高亮显示为当前最新内核版本号,会根据升级时间不同而不同,可以根据以上查看内核版本命令查看,并替换以下命令的高亮部分。

yum --enablerepo=elrepo-kernel install -y kernel-lt
grub2-set-default 'CentOS Linux (4.4.237-1.el7.elrepo.x86_64) 7 (Core)'

重启一下服务器

reboot

kube-proxy 开启ipvs的前置条件

modprobe br_netfilter

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


chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2

导入阿里云的镜像仓库

yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker-ce

yum update -y && yum install -y docker-ce

安装完docker-ce相关组件重启服务器

reboot

重启后,Linux内核又变回原来的,所以要重新设置成4.4并再次重启

grub2-set-default 'CentOS Linux (4.4.237-1.el7.elrepo.x86_64) 7 (Core)' && reboot

启动docker,并将docker设置为开机自启动

systemctl start docker
systemctl enable docker

创建docker配置文件

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
    "exec-opts":["native.cgroupdriver=systemd"],
    "log-driver":"json-file",
    "log-opts":{
        "max-size":"100m"
    }
}
EOF

创建docker.service.d文件夹,用于存放docker相关服务

mkdir -p /etc/systemd/system/docker.service.d

重启docker服务

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

安装kubeadm 主从配置

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubeadm、kubectl和kubelet

yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1

设置启动开机自启kubelet服务

systemctl enable kubelet.service

注意:如果有下载好的镜像,可以参考如下脚本进行导入操作,如果没有请跳过以下步骤,直接到“执行kubeadm初始化”

创建load-images.sh,用于批量导入kubeadm-basic镜像,内容如下:

#!/bin/bash
ls /root/kubeadm-basic.images > /tmp/image-list.txt
cd /root/kubeadm-basic.images
for i in $(cat /tmp/image-list.txt)
do
   docker load -i $i
done
rm -rf /tmp/image-list.txt

给创建的脚本赋权

chmod a+x load-images.sh

执行

./load-images.sh

Linux命令扩展,远程传输命令

scp -r kubeadm-basic.images load-images.sh root@node5:/root/
scp -r kubeadm-basic.images load-images.sh root@node7:/root/

以下命令只需要在主节点执行
将kubeadm配置输出到kubeadm-config.yaml

kubeadm config print init-defaults > kubeadm-config.yaml

打开kubeadm-config.yaml,并修改相关配置

vi kubeadm-config.yaml

改ip,advertiseAddress: 192.168.20.69
改kubernetes版本,kubernetesVersion: v1.15.1
添加,dnsDomain: cluster.local下一行添加(注意缩进,不可用tab,一般为2个或4个空格)
podSubnet: "10.244.0.0/16"
最后添加
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
    SupportIPVSProxyMode: true
mode: ipvs

注意:以上高亮部分为主节点ip。

保存退出

:wq

执行kubeadm初始化

#v1.15.1版本使用如下命令
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log

#v1.15.1以上版本使用如下命令,此时最新版本为v1.18.17
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.17 --upload-certs | tee kubeadm-init.log

查看k8s日志

vi /usr/local/kubeadm-init.log

kubeadm初始化日志

看日志提醒,执行如下语句

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubeadm命令扩展
节点重置(安装过程中不需要执行,如果节点安装出错可以使用,清除子节点也可以使用)

kubeadm reset -f

节点删除(安装过程中不需要执行)

kubectl delete node <node name>

创建install-k8s文件夹,将安装过程中的文件进行整理

mkdir install-k8s
mv kubeadm-init.log kubeadm-config.yaml install-k8s/
cd install-k8s/
mkdir core
将kubeadm-init.log kubeadm-config.yaml移动到core目录下
mv * core/

最后将安装文件放到usr/local文件夹下面

mv install-k8s/ /usr/local/

部署网络Flannel
Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。

在install-k8s目录下面创建plugin文件夹,在plugin文件夹下面创建flannel文件夹

mkdir plugin
cd plugin
mkdir flannel

创建Flannel

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

子节点添加

cd /usr/local/install-k8s/core
vi kubeadm-init.log

找到类似如下语句,到各子节点执行即可

kubeadm join 192.168.20.69:6443 --token abcdef.0123456789abcdef     \
--discovery-token-ca-cert-hash sha256:97d96ca8e4b393481213dec699f1d772dcbf4e81dbf51c568be61250ffea57e3

到此Kubernetes以安装完成,可以通过如下命令查看节点状态,如果为ready,说明安装成功

kubectl get node -o wide(-o wide表示查看节点详情,kubectl其他get命令都可添加以查看详情)

kubectl 相关命令扩展(安装过程中不需要执行)

运行2个副本数的service-provider容器

kubectl run service-provider --image=hub.sunwin.com/swbdp/swbdp:v2.2.8  --replicas=2

运行1个副本数的端口为8086的nginx-swbd容器

kubectl run nginx-swbd --image=hub.sunwin.com/swbdp/swbd:v2.2.8 --port=8086 --replicas=1

将1个副本扩容为3个副本:

kubectl scale --replicas=3 deployment/nginx-swbd
kubectl get deployment
kubectl get rs
kubectl get pod
kubectl get pod -o wide(查看pod更多信息添加-o wide)
kubectl delete pod podname
kubectl get svc

如果是前端项目curl ip可以直接访问

暴露端口,将目标端口8086暴露为30000端口

kubectl expose deployment nginx-swbd --port=30000 --target-port=8086

修改服务,将type改为NodePort,可以通过外网访问服务

kubectl edit svc nginx-swbd

type 改成NodePort

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐