1、管理节点配置
增加主机解析
vi /etc/hosts
192.168.2.121 master
192.168.2.122 node1
192.168.2.123 node2

停止防火墙
systemctl stop firewalld
systemctl disable firewalld

配置yum源
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
vi /etc/yum.repos.d/kubernetes.repo
[Kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1

wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
rpm --import yum-key.gpg

使用阿里云静像加速器
tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://wgcscytr.mirror.aliyuncs.com"]
> }
> EOF

systemctl daemon-reload

安装应用
yum install docker-ce kubelet kubeadm kubectl -y
------------------------------------------------------------
使用代理获取静像
vi /usr/lib/systemd/system/docker.service
[Service]
Environment="HTTPS_PROXY=http://www.ik8s.io:10080"
Environment="NO_PROXY=127.0.0.0/8,172.20.0.0/16"

systemctl daemon-reload

忽略swap错误,或者使用(swapoff -a)禁用swap
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
-------------------------------------------------------------
关闭swap功能
swapoff -a

--------------------------------------------------------------

启动docker
systemctl start docker
systemctl enable docker
docker info

开启bridge-nf-call-iptables
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
echo "1" > /proc/sys/net/bridge/bridge-nf-call-ip6tables

启动kubelet
systemctl start kubelet.service
systemctl enable kubelet.service

进行kube初始化
kubeadm init --kubernetes-version=v1.15.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

查看需要拉取哪些静像
kubeadm config images list

手工拉取静像
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.1
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.1
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.1
docker pull mirrorgooglecontainers/kube-proxy:v1.15.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1
docker pull jmgao1983/flannel

复制重命名静像
docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.15.1 k8s.gcr.io/kube-apiserver:v1.15.1
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.15.1 k8s.gcr.io/kube-controller-manager:v1.15.1
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.15.1 k8s.gcr.io/kube-scheduler:v1.15.1
docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.15.1 k8s.gcr.io/kube-proxy:v1.15.1
docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag docker.io/mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag docker.io/coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker tag jmgao1983/flannel:latest quay.io/coreos/flannel:v0.11.0-amd64

删除多余静像
docker rmi mirrorgooglecontainers/kube-apiserver:v1.15.1
docker rmi mirrorgooglecontainers/kube-controller-manager:v1.15.1
docker rmi mirrorgooglecontainers/kube-scheduler:v1.15.1
docker rmi mirrorgooglecontainers/kube-proxy:v1.15.1
docker rmi mirrorgooglecontainers/pause:3.1
docker rmi mirrorgooglecontainers/etcd:3.3.10
docker rmi coredns/coredns:1.3.1
docker rmi jmgao1983/flannel:latest


查看静像
docker images

继续进行kube初始化
kubeadm init --kubernetes-version=v1.15.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

记录子节点加入命令行
kubeadm join 192.168.2.121:6443 --token 1i9d6a.o328eax5vrs2x7xf --discovery-token-ca-cert-hash sha256:c143e64032b929079f97282256c72d11eacb8c5874527de0e466ed1b47f5f5bf

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

查看集群状态
kubectl get cs

部署flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看当前已下载的静像
docker images
---------------------
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.15.1 89a062da739d 2 weeks ago 82.4MB
k8s.gcr.io/kube-controller-manager v1.15.1 d75082f1d121 2 weeks ago 159MB
k8s.gcr.io/kube-apiserver v1.15.1 68c3eb07bfc3 2 weeks ago 207MB
k8s.gcr.io/kube-scheduler v1.15.1 b0b3c4c404da 2 weeks ago 81.1MB
quay.io/coreos/flannel v0.11.0-amd64 ff281650a721 6 months ago 52.6MB
k8s.gcr.io/coredns 1.3.1 eb516548c180 6 months ago 40.3MB
k8s.gcr.io/etcd 3.3.10 2c4adeb21b4f 8 months ago 258MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 19 months ago 742kB

查看名称空间
kubectl get ns
查看指定名称空间下pod状态
kubectl get pods -n kube-system -o wide
查看pod详细信息
kubectl describe pods kube-proxy-tsnpd -n kube-system
查看节点状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 102m v1.15.1
node1 Ready <none> 51m v1.15.1

2、子节点配置
增加主机解析
vi /etc/hosts
192.168.2.121 master master.com
192.168.2.122 node1 node1.com
192.168.2.123 node2 node2.com

配置yum源
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
vi /etc/yum.repos.d/kubernetes.repo
[Kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1

wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
rpm --import yum-key.gpg

安装应用
yum install -y docker-ce kubelet kubeadm

关闭swap功能
swapoff -a

systemctl restart docker.service kubelet.service
systemctl enable docker.service kubelet.service

加入集群
kubeadm join 192.168.2.121:6443 --token 1i9d6a.o328eax5vrs2x7xf --discovery-token-ca-cert-hash sha256:c143e64032b929079f97282256c72d11eacb8c5874527de0e466ed1b47f5f5bf

手工拉取静像
docker pull mirrorgooglecontainers/kube-proxy:v1.15.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull jmgao1983/flannel

复制重命名静像
docker tag mirrorgooglecontainers/kube-proxy:v1.15.1 k8s.gcr.io/kube-proxy:v1.15.1
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag jmgao1983/flannel:latest quay.io/coreos/flannel:v0.11.0-amd64

删除多余静像
docker rmi mirrorgooglecontainers/kube-proxy:v1.15.1
docker rmi mirrorgooglecontainers/pause:3.1
docker rmi jmgao1983/flannel:latest

3、容器编排管理
kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 --dry-run=true#干跑模式,不会创建pod
kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
--------------------------------------------------
kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deploy 1/1 1 1 52m nginx-deploy nginx:1.14-alpine run=nginx-deploy
-------------------------------------------------
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-7689897d8d-ldgxj 1/1 Running 0 51m 10.244.1.2 node1 <none> <none>
--------------------------------------------------------
暴露服务访问地址,只能通过节点访问
kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80
查看pod信息
kubectl get pods -n kube-system -o wide
查看服务信息
kubectl get svc -n kube-system
查看DNS信息
cat /etc/resolv.conf
创建客户端
[root@master ~]# kubectl run client --image=busybox --replicas=1 -it --restart=Never
地址解析
[root@master ~]# dig -t A nginx.default.svc.cluster.local @10.96.0.10
查看服务信息
---------------------------------------
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28h
nginx ClusterIP 10.99.55.181 <none> 80/TCP 36m
-----------------------------------------
查看服务详细信息
----------------------------------------
[root@master ~]# kubectl describe svc nginx
Name: nginx
Namespace: default
Labels: run=nginx-deploy
Annotations: <none>
Selector: run=nginx-deploy
Type: ClusterIP
IP: 10.99.55.181
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.2:80
Session Affinity: None
Events: <none>
--------------------------------------------
服务扩容
kubectl scale --replicas=5 deployment nginx-deploy
服务缩容
kubectl scale --replicas=3 deployment nginx-deploy
服务升级
kubectl set image deployment nginx-deploy nginx-deploy=nginx:1.15
服务回滚
kubectl rllout undo deployment nginx-deploy
将服务中的type改为NodePort,即可从外部访问
kubectl edit svc nginx-deploy
type:NodePort

通过外部浏览器访问:http://192.168.2.123:30719/
kube命令补全
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

以yaml格式查看pod详细信息
kubectl get pod nginx-deploy-7689897d8d-ldgxj -o yml
查看pod访问日志信息
kubectl logs pod-demo nginx

通过yamal创建pod
mkdir manifests
vi pod-demo

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: nginx
    tier: frontend
  annotations:
    nginx/create-by: "trent hu"
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    - name: https
      containerPort: 443
  livenessProbe:#第一种探针
      httpGet:
        port: http
        path: /index.html    
      initialDelaySeconds: 1
      periodSeconds: 3      
  - name: busybox
    image: busybox:latest
    command: ["/bin/sh","-c","touch /tmp/healthy; sleep 30; rm -f /tmp/helpthy; sleep 3600"]
    livenessProbe:#第二种探针
      exec:
        command: ["test","-e","/tmp/healthy"]
      initialDelaySeconds: 1
      periodSeconds: 3    
  nodeSelector:
    disktype: ssd
探针和卷示例

相关文章: