使用kubeadm安装k8s集群及k8s使用
目录
1概述 2
1.1 清单 2
1.2 角色组件 2
2.安装前准备 2
2.1设置系统主机名以及hosts文件 2
2.2修改hosts文件,master和node节点上都需要改 2
2.3 ssh互信 3
2.3设置防火墙为iptables并清空规则 3
2.4调整内核参数 3
3 安装k8s 4
3.1安装Docker 4
3.2安装k8s(每个节点都需要做) 7
3.2.1导入阿里云kubeadm镜像仓库 7
3.2.2 安装 7
3.2.3设置开机自启动 7
3.2.4初始化master节点 7
3.2.5成功安装之后的操作 8
3.2.6 node节点加入集群方法 9
3.2.7 验证k8s是否安装成功 9
4 K8s简单使用 9
4.1配置清单: 9
4.2 创建、查看pod 10
4.3 实战 10
1概述
1.1 清单
主机名 | IP地址 |
---|---|
master.lab.example.com | 192.168.20.146 |
node.lab.example.com | 192.168.20.147 |
1.2 角色组件
Master:k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;Kubernetes Schedule是负责资源调度(Pod调度)的进程
Node:Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。关联Master管理节点,拥有名称和IP、系统资源信息。运行docker eninge服务,守护进程kunelet及负载均衡器kube-proxy.
每个Node节点都运行着以下一组关键进程
kubelet:负责对Pod对于的容器的创建、启停等任务
kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作
2.安装前准备
2.1设置系统主机名以及hosts文件
master: hostnamectl set-hostname master
node: hostnamectl set-hostname node
2.2修改hosts文件,master和node节点上都需要改
192.168.20.146 master.lab.example.com
192.168.20.147 node.lab.example.com
2.3 ssh互信
在master节点上操作
ssh-keygen 一路回车
ssh-copy-id root@master.lab.example.com
ssh-copy-id root@node.lab.example.com
2.3设置防火墙为iptables并清空规则
以下操作master和node节点都要做
systemctl stop firewalld && systemctl disable firewalld && yum -y install iptables-services && \\ systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
关闭SELINUX、SWAP
swapoff -a && sed -i '/swap/d' /etc/fstab && setenforce 0 && sed -i 's/enforcing/SELINUX=disabled/g' /etc/selinux/config
2.4调整内核参数
以下操作master和node节点都要做
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle=0
#禁止使用swap空间,只有当系统OOM时才允许使用它
vm.swappiness = 0
#不检查物理内存是否够用
vm.overcommit_memory=1
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
刷新修改内核参数
sysctl -p
设置rsyslogd和systemd journald
mkdir /var/log/journal
mkdir /etc/systemd/jorunald.conf.d
cat > /etc/systemd/jorunald.conf.d/99-prophet.conf << EOF
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
#最大占用空间
SystemMaxUse=10G
#单日志文件最大大小
SystemMaxFileSize=200M
#日志保存时间2周
MaxRetentionSec=2week
#不将日志转发到syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
kube-rpoxy开启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
3 安装k8s
以下步骤master和node节点都要做
3.1安装Docker
vim /etc/yum.repo.d/docker.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum install -y docker-ce
添加阿里镜像加速器,这里使用我自己的账号,如果在内网,镜像都加载到本机,这部可有可无
mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://o9ofxrn0.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload && systemctl start docker && systemctl enable docker
3.2安装k8s(每个节点都需要做)
3.2.1导入阿里云kubeadm镜像仓库
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3.2.2 安装
yum -y install kubeadm kubectl kubelet
3.2.3设置开机自启动
systemctl enable kubelet.service
3.2.4初始化master节点
kubeadm init --pod-network-cidr=10.244.0.0/16
这里注意下,如果你没有翻墙软件,那么这些基础镜像是下载不下来的,因此也不能够初始化,正如下图
如果你的网络现在可以上ins、Facebook这些网站,那你的这一步是没有问题的如下图
3.2.5成功安装之后的操作
mkdir -p $HOME/.kube # 该目录用于保存kubectl 和kubeapi的连接缓存以及认证文件
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
上面的成功安装信息已经提示我们需要这些步骤
2.2.6 部署网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
3.2.6 node节点加入集群方法
kubeadm join 192.168.20.146:6443 --token o0hp1b.oyl6q5n8zeugwo80 \
--discovery-token-ca-cert-hash sha256:5b207bab6f1091da3b8ae3cba4726b130fa4ea20b884e8e398a108dfce91a5cc
上图成功安装信息中也有这样的信息,#token和cert hash需要修改为你的配置,可以在kubeadm-init.log 中找到
3.2.7 验证k8s是否安装成功
kubectl get nodes
kubectl get pods -n kube-system -o wide
4 K8s简单使用
4.1配置清单:
apiVersion: v1 指定api版本,此值必须在kubectl apiversion中
kind: Pod 类型,这里就没有容器的概念了,k8s是将容器封装成pod,pod里面可以跑多个容器
metadata: 元数据
name: pod-demo 起名
namespace: default 名称空间,这里我们可以使用kubectl get ns来查看我们可用的
labels: 标签
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1 镜像名称
4.2 创建、查看pod
kubectl create -f myapp.yml
kubectl get pods -o wide
此时我们就可以看到我们想看到一看网页前端的应用被部署到我的k8s集群中来了,关键还是镜像的制作,如果此时我需要升级应该怎么办?我们只需要更新我们的配置清单,也就是yml文件,将image的镜像修改掉,
这里有个疑问,我们pod的IP一直在改变,这里我们就要使用到calicoctl,open vswitch等知识点,这里就不一一说明了,比较复杂!
4.3 实战
apiVersion: apps/v1
kind: Deploy
metadata:
name: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80