K8S 极速入门

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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

安装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源配置正确

安装docker

查看可安装的docker-ce版本

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

如果上面这步显示不出来可用的版本,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

查看docker-ce是否安装成功

docker version

设置开机自启动和启动docker

systemctl enable docker
systemctl start docker

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

修改其目的是为了后续使用/etc/docker/daemon.json来

进行更多配置

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

新建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(所有节点)

yum list | grep kubeadm

输入y 回车

如果你上面是单台安装的,只需要将这个yum源scp到worker1和2

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

这里要输入yes和worker1和2的密码

复制到过去后,需要同样的做验证

yum list | grep kubeadm

输入y 回车

生成 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

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。

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

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

systemctl enable kubelet
systemctl status kubelet

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

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

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集群

在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初始化成功

初始化成功,注意:把初始化的日志复制粘贴保存,后面有用!

使用集群

master节点

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

所有节点上传calico-39文件夹,导入对应的镜像

master节点修改calico.yml

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

在看622行这个地址,要跟kubeadm init 的时候–pod-network-cidr=10.244.0.0/16 保持一致

改完 :wq 保存退出

kubectl apply -f calico.yml

到两个worker节点,分别执行初始化日志中最后的kubeadm join …

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

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

查看节点集群所有节点

kubectl get nodes

查看集群健康状态

kubectl get cs

查看集群信息

kubectl cluster-info

查看pods运行情况

kubectl get pods --namespace kube-system

kubectl使用

kubectl帮助方法

检查kubectl是否安装

rpm -qa | grep kubectl

获取kubectl帮助方法

kubectl --help

kubectl子命令使用分类

在worker节点如何使用kubectl命令管理k8s集群?

在worker节点执行

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

使用命令验证

kubectl get nodes

NameSpace

查看NameSpace

kubectl get namespace

说明

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集群能够调度的最小单元

查看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

创建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进行关联

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

删除Service

查看service

kubectl get service

删除service

kubectl delete service nginx-app

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
Kubernetes 负载均衡 Perl
kubernetes—五个概念入门(二)
kubernetes—五个概念入门(二)
68 0
|
3月前
|
Kubernetes 应用服务中间件 数据中心
kubernetes—五个概念入门(一)
kubernetes—五个概念入门(一)
78 0
|
5月前
|
Kubernetes 关系型数据库 MySQL
k8s教程(基础篇)-入门及案例
k8s教程(基础篇)-入门及案例
545 0
|
6月前
|
存储 Kubernetes 调度
【K8S系列】第二讲:Pod入门
【K8S系列】第二讲:Pod入门
75 0
|
4月前
|
Kubernetes API 调度
Kubernetes 入门
一、Kubernetes 简介 二、Kubernetes 架构
88 1
|
6月前
|
Kubernetes Cloud Native Go
Kubernetes实践:从入门到实践
Kubernetes实践:从入门到实践
92 0
|
6月前
|
Prometheus Kubernetes Cloud Native
《Kubernetes 入门:构建、部署和管理你的第一个 K8s 集群》
《Kubernetes 入门:构建、部署和管理你的第一个 K8s 集群》
396 0
|
5月前
|
存储 Kubernetes API
(二)容器从入门到深入-初识Kubernetes
(二)容器从入门到深入-初识Kubernetes
|
6月前
|
Kubernetes 监控 负载均衡
【K8S系列】第一讲:基础概念入门
【K8S系列】第一讲:基础概念入门
51 0
|
7月前
|
运维 Kubernetes API
Kubernetes 入门&进阶实战
Kubernetes 入门&进阶实战
Kubernetes 入门&进阶实战