K8S 极速入门

主机安全配置(所有节点)

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

确认是否运行

firewall-cmd --state

SELINUX配置
做出下述修改,一定要重启系统才能生效

sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

主机时间同步(所有节点)

yum -y install ntpdate
crontab -l 0 */1 * * * ntpdate time1.aliyun.com

永久关闭swap分区(所有节点)

使用kubeadm部署必须关闭swap分区,修改配置文件后
需要重启操作系统。

vi /etc/fstab

在swap文件系统对应的行,行首添加#表示注释。

添加网桥过滤(所有节点)

cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

加载br_netfilter模块

modprobe br_netfilter

查看是否加载

lsmod | grep br_netfilter

加载网桥过滤配置文件

sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

开启ipvs(所有节点)

安装ipset及ipvsadm

yum -y install ipset ipvsadm

在所有节点执行如下脚本

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
sh /etc/sysconfig/modules/ipvs.modules
lsmod | grep ip_vs_rr

K8S 极速入门_第1张图片

安装docker-ce(所有节点)

所有节点安装wget和vim命令

yum -y install wget vim

YUM源设置

首先去到 /etc/yum.repos.d/ 目录,删除该目录下所有repo文件
下载centos基础yum源配置(这里用的是阿里云的镜像)

curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

下载docker的yum源配置

curl -o docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

配置kubernetes的yum源

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

执行下列命令刷新yum源缓存

 yum clean all  
 yum makecache  
 yum repolist

出现下面列表表示yum源配置正确
K8S 极速入门_第2张图片

安装docker

查看可安装的docker-ce版本

yum list docker-ce.x86_64 --showduplicates | sort -r

K8S 极速入门_第3张图片
如果上面这步显示不出来可用的版本,rm -rf /etc/yum.repos.d/docker-ce.repo 删除这个yum源,重新获取,再来一遍

安装指定版本docker-ce
此版本不需要修改服务启动文件及iptables默认规则链策略。

yum -y install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7
yum -y install containerd.io

K8S 极速入门_第4张图片
K8S 极速入门_第5张图片
查看docker-ce是否安装成功

docker version

K8S 极速入门_第6张图片
设置开机自启动和启动docker

systemctl enable docker
systemctl start docker

修改docker-ce服务配置文件(所有节点)

修改其目的是为了后续使用/etc/docker/daemon.json来
进行更多配置

vim /usr/lib/systemd/system/docker.service

K8S 极速入门_第7张图片
新建daemon.json文件

vim /etc/docker/daemon.json

插入下面内容

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

重启docker

systemctl restart docker
systemctl restart containerd

查看是否启动成功

systemctl status docker
systemctl status containerd

K8S 极速入门_第8张图片

安装k8s(所有节点)

yum list | grep kubeadm

输入y 回车
K8S 极速入门_第9张图片
如果你上面是单台安装的,只需要将这个yum源scp到worker1和2

scp /etc/yum.repos.d/kubernetes.repo worker1:/etc/yum.repos.d/

这里要输入yes和worker1和2的密码
K8S 极速入门_第10张图片
复制到过去后,需要同样的做验证

yum list | grep kubeadm

输入y 回车
K8S 极速入门_第11张图片
生成 containerd 的默认配置文件

containerd config default > /etc/containerd/config.toml

查看 sandbox 的默认镜像仓库在文件中的第几行

cat /etc/containerd/config.toml | grep -n "sandbox_image"

使用 vim 编辑器 定位到 sandbox_image,将 仓库地址修改成 k8simage/pause:3.6

vim /etc/containerd/config.toml

sandbox_image = " registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"

重启 containerd 服务

systemctl daemon-reload
systemctl restart containerd.service

安装kubeadm kubelet kubectl

yum -y install --setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0

K8S 极速入门_第12张图片
为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。

vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet
systemctl status kubelet

K8S 极速入门_第13张图片

k8s集群容器镜像准备(master)

查看集群使用的容器镜像

kubeadm config images list

将列表中的文件导入到image.list文件,便于制作脚本

kubeadm config images list >> image.list
 vim image.list
#!/bin/bash
img_list='registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.9-0
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.10.1'
for img in ${img_list}
do
        docker pull $img
done

K8S 极速入门_第14张图片

sh images.list
docker images

在这里插入图片描述

scp传输pause和kube-proxy两个镜像到worker节点

docker save -o kube-proxy.tar registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy
docker save -o pause.tar registry.cn-hangzhou.aliyuncs.com/google_containers/pause

K8S 极速入门_第15张图片

scp kube-proxy.tar pause.tar worker1:/root
scp kube-proxy.tar pause.tar worker2:/root

在这里插入图片描述
在worker节点 load 镜像

docker load -i kube-proxy.tar
docker load -i pause.tar

K8S 极速入门_第16张图片

初始化k8s集群

在master节点执行,10.244.0.0/16是固定的,192.168.150.100是master节点ip

kubeadm init --kubernetes-version=v1.17.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.150.100 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

如果报下面这些错
在这里插入图片描述
在这里插入图片描述
请执行下面2条命令后,再执行一次上面kubeadm init …

rm -rf /etc/kubernetes/
swapoff -a && kubeadm reset  && systemctl daemon-reload && systemctl restart kubelet  && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

看到下面面板就表示k8s初始化成功
K8S 极速入门_第17张图片
初始化成功,注意:把初始化的日志复制粘贴保存,后面有用!

使用集群

master节点

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

所有节点上传calico-39文件夹,导入对应的镜像
K8S 极速入门_第18张图片
master节点修改calico.yml

vim calico.yml
:set nu  // 显示行号
:607  //跳到607行

K8S 极速入门_第19张图片
在看622行这个地址,要跟kubeadm init 的时候–pod-network-cidr=10.244.0.0/16 保持一致
K8S 极速入门_第20张图片
改完 :wq 保存退出

kubectl apply -f calico.yml

K8S 极速入门_第21张图片
到两个worker节点,分别执行初始化日志中最后的kubeadm join …

kubeadm join 192.168.150.100:6443 --token 0cestx.f8qj3deigs45kdhu \
    --discovery-token-ca-cert-hash sha256:804d4ad486083b6a73fbe24db673dda14feea91b40ef15137ff3329c210535da

K8S 极速入门_第22张图片
K8S 极速入门_第23张图片

验证k8s集群可用性(master节点)

查看节点集群所有节点

kubectl get nodes

K8S 极速入门_第24张图片
查看集群健康状态

kubectl get cs

查看集群信息

kubectl cluster-info

查看pods运行情况

 kubectl get pods --namespace kube-system

K8S 极速入门_第25张图片

kubectl使用

kubectl帮助方法

检查kubectl是否安装

rpm -qa | grep kubectl

获取kubectl帮助方法

kubectl --help

kubectl子命令使用分类

K8S 极速入门_第26张图片
K8S 极速入门_第27张图片
在worker节点如何使用kubectl命令管理k8s集群?
在worker节点执行

mkdir .kube
scp master1:/root/.kube/config .kube/

使用命令验证

kubectl get nodes

K8S 极速入门_第28张图片

NameSpace

查看NameSpace

kubectl get namespace

K8S 极速入门_第29张图片
说明
default 用户创建的pod默认在此命名空间
kube-public 所有用户均可以访问,包括未认证用户
kube-node-lease kubernetes集群节点租约状态v1.13加入
kube-system kubernetes集群在使用

创建NameSpace

kubectl create namespace test

删除NameSpace
删除命名空间时,命名空间中包含的所有资源对象同时被删除。

kubectl delete namespace test

Pod

Pod是kubernetes集群能够调度的最小单元
K8S 极速入门_第30张图片

查看pod

查看default命名空间中的Pod

kubectl get pod
# 或者
kubectl get pods
# 或者
kubectl get pod --namespace default
# 或者
kubectl get pods --namespace default

查看kube-system命名空间中的Pod

kubectl get pod -n kube-system

K8S 极速入门_第31张图片

创建Pod

编写用于创建Pod资源清单文件

vim 02-create-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: ngninx-pod
    image: nginx:latest
    ports:
    - name: nginxport
      containerPort: 80

应用用于创建Pod资源清单文件

kubectl apply -f 02-create-pod.yaml

在这里插入图片描述

查看pod更加详细信息

kubectl get pods -o wide

在这里插入图片描述

删除Pod

kubectl命令行删除

kubectl delete pods pod1

在这里插入图片描述

通过kubectl使用Pod资源清单文件删除

kubectl delete -f 02-create-pod.yaml

Controller(控制器)

创建Deployment控制器类型应用

通过kubectl命令行创建

kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2

说明
nginx-app 是deployment控制器类型的应用名称
nginx:latest 是应用运行的Pod中的Container所使用的镜像
IfNotPresent 是Container容器镜像下载策略,如果本地有镜像,使用本地,如果本地没有镜像,下载镜像
–replicas=2 是指应用运行的Pod共计2个副本,这是用户的期望值,Deployment控制器中的ReplicaSet控制器会
一直监控此应用运行的Pod副本状态,如果数量达不到用户期望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量。

查看Deployment控制器类型应用

kubectl get deployment.apps

在这里插入图片描述

删除Deployment控制器类型应用

先查看

 kubectl get deployment.apps

在这里插入图片描述
再删除

kubectl delete deployment.apps nginx-app

在这里插入图片描述

Service

介绍&作用

Service 不是实体服务,是一条iptables或ipvs的转发规则,通过Service为pod客户端提供访问pod方法,即客户端访问pod入口
Service通过Pod标签与Pod进行关联
K8S 极速入门_第32张图片

Service类型

ClusterIP:默认,分配一个集群内部可以访问的虚拟IP
NodePort:在每个Node上分配一个端口作为外部访问入口
LoadBalancer:工作在特定的Cloud Provider上,例如Google,Cloud,AWS,OpenStack
ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信

Service创建

创建Deployment类型应用

kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1

验证Deployment类型应用创建情况

kubectl get deployment.apps

创建Service与Deployment类型应用关联

kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80

在这里插入图片描述
说明
expose 创建service
deployment.apps 控制器类型
nginx-app 应用名称,也是service名称
–type=ClusterIP 指定service类型
–target-port=80 指定Pod中容器端口
–port=80 指定service端口

访问Service以实现访问Pod目的

kubectl get service

K8S 极速入门_第33张图片

删除Service

查看service

kubectl get service

删除service

kubectl delete service nginx-app

K8S 极速入门_第34张图片

你可能感兴趣的:(k8s,kubernetes,容器,云原生)